【发布时间】:2015-04-15 06:49:42
【问题描述】:
我有一个整数(i)占用4个字节,我假设它是这样存储在内存中的,起始地址为1000,
如果我写int*p=&i;
p 现在存储起始地址,这里是 1000。
如果我增加 p 它指向地址 1004.
有没有办法遍历地址 1000、1001、1002 和 1003,以便我可以使用指针分隔和打印数字 1、5、2、6? 请帮忙..... :((新手)
我对存储的假设可能是错误的 谁能帮我纠正一下? :(
编辑 1
根据下面Mohit Jain给出的答案和其他人的建议,
unsigned char *cp = reinterpret_cast<unsigned char *>(&i);
for(size_t idx = 0; idx < sizeof i; ++idx) {
cout << static_cast<int>(cp[idx]);
}
我得到的答案是 246 5 0 0 .
我意识到我假设内存结构的方式是错误的, 那么有没有办法使用指针获取实际数字??
【问题讨论】:
-
i的类型是什么?您可以使用 char * 类型的指针来逐字节遍历内存。
-
请注意,整数是二进制编码的,因此十进制数 1526 编码为 0x000005F6(假设为 32 位
int) - 您将在字节中看到的值是 0、0、5 和0xF6/246 - 可能是另一个顺序(由于endianness)。数字 0x01050206 将在大端机器上存储为您的插图 - 十进制值为 17105414 - 或 0x06020501=100795649 在小端机器上。 -
您在问题中说明的布局称为binary-coded decimal。它偶尔用于特殊目的,但它不是在典型计算机上用于通用计算的整数表示方式。
-
更新了我的问题...请检查:(
-
@DeepN "那么有没有办法使用指针来获取实际数字??" 你不需要指针,你只需使用
/除法(除以 1000,100,10)和%取模以确定十进制数字。