Char数组为long to char数组

时间:2011-06-17 05:20:01

标签: c++

  

可能重复:
  Converting a four character string to a long

我想将一个char数组转换为long而后退,但我有点卡住了。

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

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

哪个应该取char数组,并将前4个字节(长度的长度)表示为long(我认为)。

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

感谢您的帮助。

编辑:第三行是拼写错误 - * mychararray应该是* mylong

3 个答案:

答案 0 :(得分:2)

  1. 你假设sizeof(long) == 4,这可能是错的。 (特别是在64位平台上)。如果该假设被破坏,则您处于未定义的行为区域:操纵mylong将读取/写入超出mychararray的已分配内存。
  2. 如果您未在第三行使用*mylong,则第二行无效
  3. 您可以使用以下内容获取char*

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

    (你应该在第一种情况下使用那种类型的强制转换,它比C型强制转换更明确。)

答案 1 :(得分:1)

另外需要注意的是,如果涉及多台机器,则CPU的字节顺序。如果费用不同,你最终会收取相反的费用。

答案 2 :(得分:0)

是的,它应该在概念上有效。然而,这些演员对底层平台做出了假设。但是,如果您正在使用C ++,我建议您使用C++ typecast

reinterpret_cast专门针对您的情况。