用位操作创建字符的问题
Problems creating a char character with bitwise operations
我试图用位操作创建一个char(8位),一次一个hex
。我正在运行的机器是小端序的。
无论如何,例如:
char buff;
buff = 0x54; // ('T')
printf(" %c n", buff ); // prints T
buff |= 0x54; // Produces the same result.
buff |= 0x50 | 0x04; // Produces the same result.
但是我应该能够使用0x5
和0x4
的位移位来创建上面的。
我试过了
buff = ((buff << 4) | 0x4) | (buff | 0x5);
及其变体,但没有进展。我觉得我错过了一些简单的东西。
编辑:解决。
谢谢所有。我从来不知道你不告诉它要移动什么就可以移动*?
- 可能没有完全理解"buff = 0x5 <<4 | 0x4"如果我正确地解释它,它将4向左移动,并设置0x5,然后OR与4?没关系。下面迈克详细解释了它的作用。非常感谢大家。
您可以将这些步骤组合起来,但下面是分解:
char buff = 0x5; // set the upper nibble of the byte
buff <<= 4; // shift it over to the left
buff |= 0x4; // OR in the lower nibble
printf("%xn", buff); // result here is 0x54
为什么你的版本不能工作:
buff = ((buff << 4) | 0x4) ... // start on the left, you shifted nothing
// (if we assume 0 was the starting value). So this
// is just going to be 0x4
buff = (0x4) | (buff | 0x5); // again, if we assume buff is 0 then this becomes 0x5
buff = 0x4 | 0x5; // (that's 0100 | 0101 which gives you 0x5)
您似乎对如何移动工作感到有点困惑,因为您试图在未移位的常量之前或中移动目的地。
你只需要:
buff = (5 << 4) | 4;
将这些常量设置为十六进制并没有什么特别的意义,但当然,由于它们每个都应该只有四位(一个十六进制数字),因此尽管使其更长,但还是有一定意义的:
buff = (0x5 << 4) | 0x4;
顺便说一下,"四位数据"的名称是一个小块(半个字节,明白吗?),说"一个十六进制"没有什么意义。
代码不应该在表达式中使用buf
的值,如下所示:
char buff = ((0x05 << 4) | 0x4);
注意,上面的表达式是一个编译时常数,即((0x05 << 4) | 0x4)
计算是由编译器执行的,而不是由目标系统的CPU执行的。
或者,您可以在几行中执行,如下所示:
char buff = 0x00;
buff |= 0x05;
buff <<= 4;
buff |= 0x04;
相当于你上面的"buff"是:
buff = (0x5 << 4) | 0x4;
将第一个数字左移4,然后用第二个
int first = 5;
int second = 4;
buff = (first << 4) | second;
相关文章:
- 从矢量C++读取字符时出现问题
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- C++理解计算字符变量的问题
- 将十六进制值设置为用于填充的字符变量时出现问题
- 编写 cin.get() 以接收字符数组时出现问题
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 字符 * 未从重载运算符或内存管理问题正确返回
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 我在使用字符的函数时遇到了一些问题
- 用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?
- 将 c++ 字符串转换为常量字符 * 时出现问题
- C++程序,将整数输入转换为字符的问题
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- C++ 初级面试问题:仅使用字符指针压缩字符序列的功能
- 通过比较字符设置字符串时出现问题
- 我的编辑距离递归代码中的字符类型有问题
- 获取“boost::文件系统::p ath”字符指针时出现问题
- C Unicode UTF-8解码字符的问题
- 类型转换问题:字符数组的元素转换为整数变量