C中位级别的显式类型转换
如果我的c代码是:C中位级别的显式类型转换,c,type-conversion,bitwise-operators,bit-shift,C,Type Conversion,Bitwise Operators,Bit Shift,如果我的c代码是: unsigned char Buffer[4] = { 0, 0, 0, 0}; unsigned long Odometer = 0xff00ff00; Buffer[3] = Odometer & 0xff; Odometer = Odometer >> 8; Buffer[2] = (unsigned char)(Odometer & 0xff); Odometer = Odometer >> 8; Buffer[1] =
unsigned char Buffer[4] = { 0, 0, 0, 0};
unsigned long Odometer = 0xff00ff00;
Buffer[3] = Odometer & 0xff;
Odometer = Odometer >> 8;
Buffer[2] = (unsigned char)(Odometer & 0xff);
Odometer = Odometer >> 8;
Buffer[1] = (unsigned char)(Odometer & 0xff);
Odometer = Odometer >> 8;
Buffer[0] = (unsigned char)(Odometer & 0xff);
缓冲区的每个索引中都有什么?我不知道如何类型铸造将工作在一点明智的水平。它是否将最高有效字节或最低有效字节从
里程表
传输到每个缓冲区
索引?存储到缓冲区[3]
Buffer[3] = Odometer & 0xff;
Buffer[2] = Odometer & 0xff;
最后8位0xff00ff00和0xff之间的掩码
然后将
里程表8位右移,得到0x00ff00ff
存储到缓冲区[2]
Buffer[3] = Odometer & 0xff;
Buffer[2] = Odometer & 0xff;
最后8位0x00ff00ff和0xff之间的掩码
和之间的掩码
0xff & 0x00 == 0x00
而
0xff & 0xff == 0xff
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
因此,结果是
Buffer[3] = 0x00;
Buffer[2] = 0xff;
Buffer[1] = 0x00;
Buffer[0] = 0xff;
按位
0xff & 0xff == 0xff
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
所以0x00&0xff看起来是这样的
|0|0|0|0|0|0|0|0|
|1|1|1|1|1|1|1|1|
-----------------
|0|0|0|0|0|0|0|0| <-- res
|1|1|1|1|1|1|1|1|
|1|1|1|1|1|1|1|1|
-----------------
|1|1|1|1|1|1|1|1| <-- res
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0|
|1|1|1|1|1|1|1|1|
-----------------
|0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |缓冲区[3]
包含里程计的最低有效字节和缓冲区[0]
的最高有效字节。@眠りネロク 取决于endianes我的朋友:)此代码与endianess无关,因此缓冲区将包含[0]=MS字节。。。[3] =LS字节,就这么简单。你有30年的有效期吗?通过SHR
进行换档空格总是用零填充,所以你可以把它记下来,投回原票:-)@PeterJ@PeterJ删除评论,但不要在自己犯错后否决?做占位符?我认为编程超过30年的人不应该做这些事情。