gca*_*dal 1 c c++ bit-manipulation
假设我有一个存储2个字节的缓冲区:
char *buf=new char[4];
// 00000010 00000000 (.. other stuff ..)
Run Code Online (Sandbox Code Playgroud)
我想要做的是用最重要的字节切换最少的字节,并将该值存储在变量中.试着按如下方式这样做:
short len=buf[1];
len <<= 8;
len |= buf[0];
// Result, as expected: 00000000 00000010
Run Code Online (Sandbox Code Playgroud)
它可以处理罚款,除非最重要的字节(buf [0])> = 128,这使得或运算符(|)用1填充短的一半.例:
Original: 10000110 00000000
Should be: 00000000 10000110
But is: 11111111 10000110
Run Code Online (Sandbox Code Playgroud)
谢谢(哦,我正在用file.read(...,4)从文件中读取字节; - 如果这是相关的话,甚至不知道了)
您的实现显然使用带符号数的二进制补码表示.请改用无符号值
unsigned char * buf = new unsigned char[2];
...
unsigned short len=buf[1];
len <<= 8;
len |= buf[0];
Run Code Online (Sandbox Code Playgroud)