2010-06-30 71 views
1

如何将无符号长数组转换为C++中的字节?我正在开发使用VS2008 C++。如何将无符号长数组转换为C++中的字节?

编辑:

我需要评估这个转换数字的大小,我想分这多头排列为29byte阵列。例如
我们有long array = 12345;
它应该转换为字节,然后我需要它的长度分为29,看看有多少数据包。

丢失数据很重要,但现在我只想得到结果。

+1

请进一步解释。你需要复制它,还是足够使用'char *'来访问原始数组?你需要改变字节序吗? – 2010-06-30 03:19:56

+0

当然有一个原因,它是'长'?您可能会丢失数据。你能解释一下你想要达到的目标吗? – Mawg 2010-06-30 03:26:35

+0

像马修说:我们在这里做什么?我们正在进行某种下采样?我们是否序列化为字节流以便在网络/文件/等上输出? – Thanatos 2010-06-30 03:27:57

回答

2
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)); 
    } 
} 
+0

请注意,ptr中的数据在little-endian机器上只是小端:这种解决方案将导致big-endian机器上的big-endian输出,以及little endian机器上的little-endian输出。了解endian-ness的含义,如果endian - ness重要,寻求一个更强大的解决方案。 – Thanatos 2010-06-30 03:33:48

+0

感谢您的解决方案,我希望它的工作,但你会帮助我,我怎么可以计算它有多少字节?另一方面,例如10等于1001,所以它是4字节 – Amir 2010-06-30 04:02:51

+0

你可以用'j * CHAR_BIT'替换'j << 3',用'((1 << CHAR_BIT) - 1)'。你需要为此包括''。 – 2010-06-30 08:16:19

相关问题