【发布时间】:2012-02-17 20:56:19
【问题描述】:
您能解释一下如何将最后 3 个字节的数据从无符号整数转换为字符数组吗?
例子:
unsigned int unint = some value;
unsigned char array[3];
【问题讨论】:
-
你说的最后三个字节是什么意思?
-
我猜他的意思是最不重要的 3 个字节,但我可能错了。
您能解释一下如何将最后 3 个字节的数据从无符号整数转换为字符数组吗?
例子:
unsigned int unint = some value;
unsigned char array[3];
【问题讨论】:
如果最后三个,您的意思是 lsb+1、lsb+2 和 msb(换句话说,除了 lsb),那么你就可以用这个了。
unsigned int unint = some value;
unsigned char * array = ( (unsigned char*)&some_value ) + 1;
【讨论】:
根据您的需要,您可能更喜欢联合:
typedef union {
unsigned int unint;
unsigned char array[3];
} byteAndInt;
或位移操作:
for(int i=0; i<3; i++)
array[i] = (unint>>8*i) & 0xFF;
前者不是字节序安全的。
【讨论】:
你可以使用它的按位右移运算符:
array[0] = unint;
array[1] = unint >> 8;
array[2] = unint >> 16;
uint 的最低有效字节存储在数组的第一个元素中。
【讨论】:
如果你必须将它转换为一个数组会比较困难,但是如果你只是想访问单个字节,那么你可以这样做
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;
【讨论】: