字符数组长字符数组

问题描述:

可能重复:
Converting a four character string to a long字符数组长字符数组

我想再次转换为字符数组一个长期而回,但我有点卡住了。

这是到目前为止我有代码的一个片段:

char mychararray[4] = {'a', 'b', 'c', 'd'}; 
unsigned long * mylong = (unsigned long *)&mychararray; 
cout << *mylong << endl; 

哪个应该采取的字符数组,并且表示第一个4个字节(一个长的长度),其为长(I认为)。

这是正确的吗?我将如何撤消它以获取char数组?

感谢您的帮助。

编辑:第三行是一个错字 - * mychararray应该是* mylong

+0

我不明白你你做了什么 Dair 2011-06-17 05:25:33

+0

这里的目标是什么? – 2011-06-17 05:49:15

  1. 你假设sizeof(long) == 4,这可能是错误的。 (特别是在64位平台上)。如果这个假设被破坏了,那么你处于未定义的行为区域:操作mylong将会在mychararray的分配内存之外进行读/写操作。
  2. 您的第二行有没有效果,如果你不上第三行使用 *mylong

你可以拿回char*的东西,如:

char *thing = reinterpret_cast<char*>(mylong); 

(你应该使用在第一种情况下,这种类型的演员也比C型演员更明确。)

+0

第三行是一个错字。 sizeof(long)在我的系统上返回4。 – JonaGik 2011-06-17 05:39:54

+0

@JonaGik:更新 – Mat 2011-06-17 05:47:42

是的,它应该在概念上起作用。然而,这样的演员会对基础平台做出假设。如果您使用C++,我会建议您使用C++ typecast

reinterpret_cast是专门为你的情况。

另一件值得注意的事情是如果涉及多台机器,CPU的永久性。如果他们不同,你最终会得到相反的结果。