我想将一个4字节的int存储在char数组中...使得char数组的前4个位置是int的4个字节。
然后,我想将int从数组中拉回...
另外,如果有人能给我在循环中做这件事的代码,就会得到加分……例如,将8个整数写入32字节数组。
int har = 0x01010101;
char a[4];
int har2;
// write har into char such that:
// a[0] == 0x01, a[1] == 0x01, a[2] == 0x01, a[3] == 0x01 etc.....
// then, pull the bytes out of the array such that:
// har2 == har
谢谢你们!
编辑:假设int
是4个字节...
EDIT2:请不要关心字节顺序...我会担心字节顺序的问题。我只想用不同的方式在C/C++中实现上面的功能。谢谢
EDIT3:如果你不知道,我正试着在底层写一个序列化类……因此,我正在寻找不同的策略来序列化一些常见的数据类型。
发布于 2009-10-06 00:33:33
这不是最理想的方法,但是endian是安全的。
int har = 0x01010101;
char a[4];
a[0] = har & 0xff;
a[1] = (har>>8) & 0xff;
a[2] = (har>>16) & 0xff;
a[3] = (har>>24) & 0xff;
发布于 2009-10-06 00:01:32
除非你关心字节顺序之类的,否则memcpy
将会完成这个任务:
memcpy(a, &har, sizeof(har));
...
memcpy(&har2, a, sizeof(har2));
当然,不能保证在任何特定的实现上都会有sizeof(int)==4
(而且在实际的实现中,这实际上是假的)。
从这里开始,编写一个循环应该是微不足道的。
发布于 2009-10-06 00:14:39
注意:通过不是最后一个赋值的元素访问联合是未定义的行为。(假设平台中的字符为8位,整数为4字节)位掩码0xFF将屏蔽一个字符,因此
char arr[4];
int a = 5;
arr[3] = a & 0xff;
arr[2] = (a & 0xff00) >>8;
arr[1] = (a & 0xff0000) >>16;
arr[0] = (a & 0xff000000)>>24;
会使arr持有最高有效字节,而arr3持有最低有效字节。
编辑:只是为了让你理解这个技巧&是位明智的'and‘,其中as &&是逻辑'and’。感谢关于被遗忘的移位的评论。
https://stackoverflow.com/questions/1522994
复制相似问题