2014-11-03 89 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