您能解释一下如何将最后3个字节的数据从无符号整数转换为字符数组吗?
示例:
unsigned int unint = some value;
unsigned char array[3];
答案 0 :(得分:5)
如果必须将其转换为数组,则会更加困难,但如果您只想访问各个字节,则可以执行
char* bytes = (char*)&unint;
如果你真的想制作一个数组(并因此制作最后3个字节的副本,而不是留下它们),你可以
unsigned char bytes[3]; // or char, but unsigned char is better
bytes[0] = unint >> 16 & 0xFF;
bytes[1] = unint >> 8 & 0xFF;
bytes[2] = unint & 0xFF;
答案 1 :(得分:5)
你可以使用按位右移运算符:
array[0] = unint;
array[1] = unint >> 8;
array[2] = unint >> 16;
uint
的最不重要字节存储在数组的第一个元素中。
答案 2 :(得分:0)
根据您的需要,您可能更喜欢工会:
typedef union {
unsigned int unint;
unsigned char array[3];
} byteAndInt;
或位移操作:
for(int i=0; i<3; i++)
array[i] = (unint>>8*i) & 0xFF;
前者不是以字节顺序安全的。
答案 3 :(得分:0)
如果是最后三个,你的意思是 lsb + 1 , lsb + 2 和 msb (换句话说,除了<之外的每个字节em> lsb ),然后就可以使用它了。
unsigned int unint = some value;
unsigned char * array = ( (unsigned char*)&some_value ) + 1;