如何访问整数指针中的每个字节?

时间:2011-11-30 10:23:46

标签: c++ memory

我知道如果整数被解剖而不是整体计算,那么单个字节的总和将产生不正确的结果。然而,为了好奇,我想检查单个字节和make.I我不确定检查整数指针中的每个字节是否正确:

#include <iostream>
int main(int argc, char *argv[])
{
    using namespace std;

    int *num = new int;
    *num = 123456789;
    cout << "Num: " << *num << '\n';
    char* numchar_ptr = reinterpret_cast<char*> (num);
    for (int i = 0; i < 4; ++i)
    {
        cout << "number char: " << i << ' ' << (short) *(numchar_ptr+i) << '\n';
        *(numchar_ptr+i) = i
    }
    cout << "New num: " << *num << '\n';
    delete num;

    return 0;
}

根据循环,整数中的字节将为:0 1 2 3 它等于二进制00000000 00000001 00000010 00000011和十进制66051 但我得到的结果“新数字”是50462976.为什么?

2 个答案:

答案 0 :(得分:4)

仔细阅读endianness

上的维基百科页面

答案 1 :(得分:1)

您需要考虑endianness。在您的系统上,数字以little-endian表示形式存储,这意味着最低地址的字节是最不重要的。

因此,您的电话号码是:

  0 * (1 << 0)
+ 1 * (1 << 8)
+ 2 * (1 << 16)
+ 3 * (1 << 24)

这是50462976。