如何将RGB格式的颜色转换为Hex格式,反之亦然?
例如,转换'#0080C0'
为(0, 128, 192)
.
我有一个unsigned char数组[248]; 填充字节.像2F AF FF 00 EB AB CD EF .....这个阵列是我的字节流,我将来自UART(RS232)的数据存储为缓冲区.
现在我想将字节转换回我的uint16和int32.
在C#中,我使用BitConverter类来执行此操作.例如:
byte[] Array = { 0A, AB, CD, 25 };
int myint1 = BitConverter.ToInt32(bytes, 0);
int myint2 = BitConverter.ToInt32(bytes, 4);
int myint3 = BitConverter.ToInt32(bytes, 8);
int myint4 = BitConverter.ToInt32(bytes, 12);
//...
enter code here
Console.WriteLine("int: {0}", myint1); //output Data...
Run Code Online (Sandbox Code Playgroud)
C中是否有类似的功能?(没有.net,我使用KEIL编译器,因为代码在微控制器上运行)
关心萨姆
我的理解是,在C/C++中,按位运算符应该是字节独立的,并且表现得像你期望的那样.我想确保我真正从64位值中获得最重要和最不重要的单词,而不用担心机器的字节顺序.这是一个例子:
uint64_t temp;
uint32_t msw, lsw;
msw = (temp & 0xFFFFFFFF00000000) >> 32;
lsw = temp & 0x00000000FFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
这会有用吗?
这会是:
((0x10203040 >> 24) & 0xFF) == 0x10
Run Code Online (Sandbox Code Playgroud)
在little-endian和big-endian机器上总是正常的吗?
我只想将uint8_t数组连接到uint64_t.事实上,我解决了我的问题,但需要了解原因.这是我的代码;
uint8_t byte_array[5];
byte_array[0] = 0x41;
byte_array[1] = 0x42;
byte_array[2] = 0x43;
byte_array[3] = 0x44;
byte_array[4] = 0x45;
cout << "index 0: " << byte_array[0] << " index 1: " << byte_array[1] << " index 2: " << byte_array[2] << " index 3: " << byte_array[3] << " index 4: " << byte_array[4] << endl;
/* This does not work */
uint64_t reverse_of_value = (byte_array[0] & 0xff) | ((byte_array[1] & 0xff) << 8) | ((byte_array[2] & 0xff) << 16) | …
Run Code Online (Sandbox Code Playgroud) 这与家庭作业有关,但这不是家庭作业.
我有困难的理解,如果有就如何按位取反(差别~
在C)将受到影响signed int
,并unsigned int
当大端机器上对小端机编译.
字节是否真的 "向后",如果是,那么按位(和其他运算符)会导致int
根据机器类型产生不同的结果吗?
虽然我们在这里,对于C中的每个按位运算符,答案是否相同,或者它是否依赖于它?
我所指的运营商是:
~ /* bitwise Not */
& /* bitwise And */
| /* bitwise Or */
^ /* bitwise Exclusive-Or */
Run Code Online (Sandbox Code Playgroud)
先感谢您!
更新:到目前为止,在阅读我的回复时,我觉得有必要问一下bitwise not运算符是否会影响a上的符号位signed int
.因为我忘记了所有那些狡猾的事情,所以我担心我在这方面有点困惑.亚当似乎在说所有的价值都被视为无符号.重新应用符号位还是一次签名的值变为无符号?
我有一个位掩码(存储为短).出于各种目的,我想将除最后5位之外的所有内容归零 - 我确信通过按位运算符可以很容易地实现这一点,但它让我望而却步.
1010 01101 1011 0111 -> 0000 0000 0001 0111
Run Code Online (Sandbox Code Playgroud)
谢谢