2011-11-30 78 views
0

我知道如果整数被解剖而不是作为一个整体来计算,那么单个字节的总数就会产生不正确的结果。然而,出于好奇,我希望检查单个字节和make.I'm不知道这是正确的整型指针检查每个字节:如何访问整数指针中的每个字节?

#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; 
} 

按照循环,整数中的字节将是:它等于00000000 00000001 00000010 00000011二进制和66051十进制 但是我得到结果“New num”是50462976.为什么?

+0

如果你是一个64位平台上的'int'可能是64位,这将使你的循环和计算错误。 –

+0

@Joachim:如果我们谈论x86-64等,那么整数可能仍然是32位,除非你有一个奇特的编译器。 –

+0

@OliCharlesworth是的,看起来我得到了我的'int'和'long'混合起来......午餐时间我想。 –

回答

1

你需要采取endianness考虑到维基百科页面。在您的系统中,数字以little-endian表示形式存储,这意味着寻址最低的字节是最不重要的。

因此,您的号码是:

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

这是50462976.

+0

太好了。这是真的。 – Amumu