如何将无符号长数组转换为C++中的字节?我正在开发使用VS2008 C++。如何将无符号长数组转换为C++中的字节?
编辑:
我需要评估这个转换数字的大小,我想分这多头排列为29byte阵列。例如
我们有long array = 12345;
它应该转换为字节,然后我需要它的长度分为29,看看有多少数据包。
丢失数据很重要,但现在我只想得到结果。
如何将无符号长数组转换为C++中的字节?我正在开发使用VS2008 C++。如何将无符号长数组转换为C++中的字节?
编辑:
我需要评估这个转换数字的大小,我想分这多头排列为29byte阵列。例如
我们有long array = 12345;
它应该转换为字节,然后我需要它的长度分为29,看看有多少数据包。
丢失数据很重要,但现在我只想得到结果。
long array[SOME_SIZE];
char* ptr = reinterpret_cast<char*>(array); // or just (char*)array; in C
// PC is little-endian platform
for (size_t i = 0; i < SOME_SIZE*sizeof(long); i++)
{
printf("%x", ptr[i]);
}
这儿有你更强大的解决方案,没有字节序(这并不能掩盖怪异的DSP器件,其中char
可以是32位的实体,这些都是特殊):
long array[SOME_SIZE];
for (size_t i = 0; i < SOME_SIZE; i++)
{
for (size_t j = 0; j < sizeof(long); j++)
{
// my characters are 8 bit
printf("%x", ((array[i] >> (j << 3)) & 0xff));
}
}
请注意,ptr中的数据在little-endian机器上只是小端:这种解决方案将导致big-endian机器上的big-endian输出,以及little endian机器上的little-endian输出。了解endian-ness的含义,如果endian - ness重要,寻求一个更强大的解决方案。 – Thanatos 2010-06-30 03:33:48
感谢您的解决方案,我希望它的工作,但你会帮助我,我怎么可以计算它有多少字节?另一方面,例如10等于1001,所以它是4字节 – Amir 2010-06-30 04:02:51
你可以用'j * CHAR_BIT'替换'j << 3',用'((1 << CHAR_BIT) - 1)'。你需要为此包括'
请进一步解释。你需要复制它,还是足够使用'char *'来访问原始数组?你需要改变字节序吗? – 2010-06-30 03:19:56
当然有一个原因,它是'长'?您可能会丢失数据。你能解释一下你想要达到的目标吗? – Mawg 2010-06-30 03:26:35
像马修说:我们在这里做什么?我们正在进行某种下采样?我们是否序列化为字节流以便在网络/文件/等上输出? – Thanatos 2010-06-30 03:27:57