【发布时间】:2014-07-21 22:13:45
【问题描述】:
我正在尝试破译一些代码,它似乎将顺序内存地址中的值与我预期的相反。 64 位有符号整数被转换为 8 位无符号字符 这是它的简化版本:
unsigned char* ucMyChar;
unsigned __int64 ui64MyInt;
CString strMyString;
//some code that assigns a value to ui64MyInt
ucMyChar = (unsigned char*)&ui64MyInt;
strMyString.Format("%02x%02x%02x%02x-%02x%02x-1%01x%02x",
ucMyChar[3], ucMyChar[2], ucMyChar[1], ucMyChar[0],
ucMyChar[5], ucMyChar[4], ucMyChar[7], ucMyChar[6]);
如果ui64MyInt 的值为:
0x010203040a0b0c0d
以下哪个是正确格式的字符串?
04030201-0b0a-1d0c
或
0a0b0c0d-0304-1102
我问的原因是因为我有一个值,我试图在这段代码中向后运行数学,因为一些需要的信息包含在用于生成这个字符串的原始值中,并且没有由于文件损坏而恢复所述信息的其他方法。到目前为止,我使用第一个字符串得出的值似乎超出了预期范围,我不确定我是否犯了数学错误,或者我是否不理解 unsigned char 指针的工作方式.
【问题讨论】:
-
视情况而定。请务必阅读en.wikipedia.org/wiki/Endianness
-
@nos: 你比我快 5 秒 :)