祝你好运。
有人可以解释一下字节反转功能的这两种实现的逻辑差异。
示例 1:
uint32_t byte_reverse_32(uint32_t num) {
static union bytes {
uint8_t b[4];
uint32_t n;
} bytes;
bytes.n = num;
uint32_t ret = 0;
ret |= bytes.b[0] << 24;
ret |= bytes.b[1] << 16;
ret |= bytes.b[2] << 8;
ret |= bytes.b[3];
return ret;
}
示例 2:
uint32_t byte_reverse_32(uint32_t num) {
static union bytes {
uint8_t b[4];
uint32_t n;
} bytes;
bytes.n = num;
uint32_t ret = 0;
ret |= (bytes.b[0] << 24) || (bytes.b[1] << 16) || (bytes.b[2] << 8) || (bytes.b[3]);
return ret;
}
我一定遗漏了一些东西,因为对于无符号整数
0xFE12ADCF
第一个例子正确地给出了0xCFAD12FE
而第二个产生 1
.我错过了什么?顺便说一句,我不知道如何在 pre+code-tags 中获取 '<<',因此
LSHIFT
.如果有可能,请随时编辑(并评论如何=))。谢谢。
编辑:修复了
bytes
-从未分配给的变量。
最佳答案
|
与 ||
不是同一个运算符.第一个是按位或,这是您想要的。第二个是 bool OR,这就是你所拥有的。
关于c - 字节反转整数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745637/