我正在从文件中读取一个字节。在本例中,我读取了两个字节(以hexa表示)
94
和73
。如何将这两个字节放在一起,使它们看起来像
9470
?
我可以使用73 >> 4
从70
中制作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 ;
答案 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。