将两个字节放在一起

时间:2016-03-24 15:09:24

标签: c++ binary

我正在从文件中读取一个字节。在本例中,我读取了两个字节(以hexa表示)

9473。如何将这两个字节放在一起,使它们看起来像

9470

我可以使用73 >> 470中制作73但是我怎样才能“把它们”放在一起?

我尝试使用(94 << 8) & ( 73 >> 4 ),但它总是返回0.

我没有发现像这样的字节。 (基本上读取本例中的一个半字节),一次读取2个字节

代码示例

uint64_t bytes;
output.read( (char *)&bytes, 2 );  // read 2 bytes
uint64_t tmp       = ( cutIt  << ( 64 - 8) ) >> ( 64 - 8) ; 
uint64_t tmp_two   = (( cutIt >> 8) & 11110000 ) >> 4;
uint64_t tmp_three = (tmp << 8) & tmp_two ;

2 个答案:

答案 0 :(得分:2)

((94 << 8)+74) & (FFF0)

会为您提供所需的输出。为此你需要思考二进制。

((10010100 <<8) + 01110100) & (1111111111110000)

最后的4个零将使你的LSB归零,这要归功于逻辑AND,并保持你的单词的含义。

要回答commentqustion:,您只需通过更改零的数量来选择要使用的nuber位。对于您的示例,这将意味着您用于逻辑AND的数字将是十六进制或二进制的FFFC 1111111111111100。

答案 1 :(得分:0)

byte b1 = 0xAB;
byte b2 = 0xCD;
...
short s = (short)(b1<<8) | ((short)(b2<<4) & 0xF0);
//s = ABC0

使用或(|)代替和(&amp;)将移位的值合并在一起,否则始终为0。