2014-11-03 52 views
2

的整数我想的整数的最低两个字节打包成另一种在整数,一个卡在此包装位到C++

​​
+0

'X =(Y&为0xFFFF)+(X〜0xFFFF的);'? – Borgleader 2014-11-03 15:17:58

+1

@Borgleader最低2字节,最低2位 – PeterT 2014-11-03 15:18:26

+0

@PeterT哦误读了。在我的防守中,这个想法是一样的,只有面具变化。 – Borgleader 2014-11-03 15:20:39

回答

4

尾段独立溶液:

x = ((y >> 0) & 0xFF) | 
    ((y >> 8) & 0xFF); 
+0

为什么?他在这两种情况下都使用整数类型,所以不会有任何endian问题。 – 2014-11-03 17:06:02

+1

@JamesKanze我只是想说一些其他的解决方案,比如'uint8_t * ptr =(uint8_t *)&the_int; x = * ptr; PTR ++; x | = * ptr;'会依赖于endian,因为你不知道'ptr'是否会给你ms字节或ls字节。如果你通过1 uint32_t和4 uint8_t组合来解决问题,那么同样的问题。 – Lundin 2014-11-03 20:30:00

1

如果我理解你正确的足够的解决方案应该是这样的:

another_integer = first_integer & 0xFFFF // which is 65536, which is 2^16 so 0000000011111111 binary (for 4 byte integer) 

这样你会分配值的两个较低的b first_integer到another_integer的ytes通过使用简单的AND掩码:

0101110011101010 
0000000011111111 AND 
---------------- 
0000000011101010 
+5

请使用0xFFFF :) – RobAu 2014-11-03 15:22:08

+0

是的,十进制数字难以读出位。如果我看到'0xF0F0',那么我知道有4位可以通过查看它交替开启和关闭,请尝试使用61680 – PeterT 2014-11-03 15:23:37

+0

好的建议,我解决它,谢谢 – 4rlekin 2014-11-03 15:24:21