@@ -1149,6 +1149,26 @@ impl FromInner<c::in6_addr> for Ipv6Addr {
1149
1149
}
1150
1150
}
1151
1151
1152
+ #[ unstable( feature = "i128" , issue = "35118" ) ]
1153
+ impl From < Ipv6Addr > for u128 {
1154
+ fn from ( ip : Ipv6Addr ) -> u128 {
1155
+ let ip = ip. segments ( ) ;
1156
+ ( ( ip[ 0 ] as u128 ) << 112 ) + ( ( ip[ 1 ] as u128 ) << 96 ) + ( ( ip[ 2 ] as u128 ) << 80 ) +
1157
+ ( ( ip[ 3 ] as u128 ) << 64 ) + ( ( ip[ 4 ] as u128 ) << 48 ) + ( ( ip[ 5 ] as u128 ) << 32 ) +
1158
+ ( ( ip[ 6 ] as u128 ) << 16 ) + ( ip[ 7 ] as u128 )
1159
+ }
1160
+ }
1161
+ #[ unstable( feature = "i128" , issue = "35118" ) ]
1162
+ impl From < u128 > for Ipv6Addr {
1163
+ fn from ( ip : u128 ) -> Ipv6Addr {
1164
+ Ipv6Addr :: new (
1165
+ ( ip >> 112 ) as u16 , ( ip >> 96 ) as u16 , ( ip >> 80 ) as u16 ,
1166
+ ( ip >> 64 ) as u16 , ( ip >> 48 ) as u16 , ( ip >> 32 ) as u16 ,
1167
+ ( ip >> 16 ) as u16 , ip as u16 ,
1168
+ )
1169
+ }
1170
+ }
1171
+
1152
1172
#[ stable( feature = "ipv6_from_octets" , since = "1.9.0" ) ]
1153
1173
impl From < [ u8 ; 16 ] > for Ipv6Addr {
1154
1174
fn from ( octets : [ u8 ; 16 ] ) -> Ipv6Addr {
@@ -1500,14 +1520,26 @@ mod tests {
1500
1520
1501
1521
#[ test]
1502
1522
fn test_ipv4_to_int ( ) {
1503
- let a = Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ;
1504
- assert_eq ! ( u32 :: from( a) , 2130706433 ) ;
1523
+ let a = Ipv4Addr :: new ( 0x11 , 0x22 , 0x33 , 0x44 ) ;
1524
+ assert_eq ! ( u32 :: from( a) , 0x11223344 ) ;
1505
1525
}
1506
1526
1507
1527
#[ test]
1508
1528
fn test_int_to_ipv4 ( ) {
1509
- let a = Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ;
1510
- assert_eq ! ( Ipv4Addr :: from( 2130706433 ) , a) ;
1529
+ let a = Ipv4Addr :: new ( 0x11 , 0x22 , 0x33 , 0x44 ) ;
1530
+ assert_eq ! ( Ipv4Addr :: from( 0x11223344 ) , a) ;
1531
+ }
1532
+
1533
+ #[ test]
1534
+ fn test_ipv6_to_int ( ) {
1535
+ let a = Ipv6Addr :: new ( 0x1122 , 0x3344 , 0x5566 , 0x7788 , 0x99aa , 0xbbcc , 0xddee , 0xff11 ) ;
1536
+ assert_eq ! ( u128 :: from( a) , 0x112233445566778899aabbccddeeff11u128 ) ;
1537
+ }
1538
+
1539
+ #[ test]
1540
+ fn test_int_to_ipv6 ( ) {
1541
+ let a = Ipv6Addr :: new ( 0x1122 , 0x3344 , 0x5566 , 0x7788 , 0x99aa , 0xbbcc , 0xddee , 0xff11 ) ;
1542
+ assert_eq ! ( Ipv6Addr :: from( 0x112233445566778899aabbccddeeff11u128 ) , a) ;
1511
1543
}
1512
1544
1513
1545
#[ test]
0 commit comments