我想将一个char数组转换为long而后退,但我有点卡住了。
这是我到目前为止的代码片段:
char mychararray[4] = {'a', 'b', 'c', 'd'};
unsigned long * mylong = (unsigned long *)&mychararray;
cout << *mylong << endl;
哪个应该取char数组,并将前4个字节(长度的长度)表示为long(我认为)。
这是对的吗?我将如何撤消它以获取char数组?
感谢您的帮助。
编辑:第三行是拼写错误 - * mychararray应该是* mylong
答案 0 :(得分:2)
sizeof(long) == 4
,这可能是错的。 (特别是在64位平台上)。如果该假设被破坏,则您处于未定义的行为区域:操纵mylong
将读取/写入超出mychararray
的已分配内存。*mylong
,则第二行无效您可以使用以下内容获取char*
:
char *thing = reinterpret_cast<char*>(mylong);
(你应该在第一种情况下使用那种类型的强制转换,它比C型强制转换更明确。)
答案 1 :(得分:1)
另外需要注意的是,如果涉及多台机器,则CPU的字节顺序。如果费用不同,你最终会收取相反的费用。
答案 2 :(得分:0)
是的,它应该在概念上有效。然而,这些演员对底层平台做出了假设。但是,如果您正在使用C ++,我建议您使用C++ typecast。
reinterpret_cast
专门针对您的情况。