如何交换字节
How to swap byte nibbles?
给定这些字节(十六进制表示):
0F
1A
2C
如何到达:
F0
A1
C2
?
使用位操作符
((x & 0x0f) << 4) | ((x & 0xf0) >> 4)
你可以这样做:
((x & 0x0f) << 4 ) | ((( x & 0xf0) >> 4) & 0xf )
这看起来很像Josh Kelley的答案,但是Josh的答案是错误的。原因:
#include <stdio.h>
int main( int argc, char *argv[] )
{
signed char x = 0x80;
x >>= 4;
printf( "%xn", x );
}
给输出:
0xfffffff8
因为>>
运算符保留了移位操作数的符号位。即,最高有效位中的1将向左传播以保留值的符号。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- C++ int* 和 char* 字节顺序已交换
- 交换未定义数据类型中的字节顺序
- 用FWRITE创建图像后,将交换字节
- 使用重新解释强制转换时交换字节序
- 交换字节中的半字节
- 尽可能高效地交换字节
- 用高位字节(8-15)交换低位字节(0-7)
- C++32位字字节交换
- 字节交换方面的一般交换实现
- 交换 DWORD 中的字节
- 如何在C++从字节数组中提取字节时交换 64 位整数
- 交换浮点数组中的字节
- C++:如何交换wchar_t的字节顺序
- 交换QByteArray中的字节
- 与数组进行字节交换
- 拷贝期间的字节交换
- 字节翻转和字节交换的区别
- 在内存映射文件中交换字节的有效方式
- 如何交换字节