打印64位c ++全内存地址

时间:2015-05-19 12:43:25

标签: c++ 64-bit cout memory-address

当我在64位机器上为c ++程序编写代码时,我注意到打印变量的地址(例如)只返回12个十六进制字符,而不是16个。这里是一个示例代码:

int a = 3 ;
cout sizeof(&a) << " bytes" << endl ;
cout << &a << endl ;

输出结果为:

  

8个字节

     

0x7fff007bcce0

显然,变量的地址是8字节(64位系统)。但是当我打印它时,我只得到12个十六进制数字而不是16个。

  • 为什么这样?我认为这是因为4&#34;失去了&#34;数字 是领先的零,没有打印。但这只是我的 我想,我希望有一个明确的,技术上正确的 答案。

  • 我如何打印整个地址?有没有内置的解决方案, 或者我应该手动使用&#34; sizeof&#34;为了获得真正的长度和 然后在地址中添加正确数量的零?

原谅我,我用谷歌搜索了一天来回答我的愚蠢问题,但我无法找到答案。我只是一个新手。 (在stackoverflow上,我没有找到任何关于我需要知道的问题/答案,但也许我错了。)

2 个答案:

答案 0 :(得分:3)

有人在这里问了一个非常相似的问题:c++ pointer on 64 bit machine

希望这会有所帮助:)

要打印带有前导零的完整64位地址,您可以使用:

std::cout
<< "0x"
<< std::hex
<< std::noshowbase
<< std::setw(16)
<< std::setfill('0')
<< n
<< std::endl ;

来自:How can I pad an int with leading zeros when using cout << operator?

答案 1 :(得分:-1)

我目前正在写一本关于C ++和Windows 32位编程的书,对于像你这样的偷看,但不幸的是我还没有完成它:(

以下代码演示了如何使用cout方法显示64位无符号数:

// Define a 64-bit number. You may need to include <stdint.h> header file depending on your C++ compiler.

uint64_t UI64 = 281474976709632ULL; // Must include ULL suffix and this is C99 C++ compiler specific.

// unsigned __int64 UI64 = 281474976709632ULL; // Must include ULL suffix and this is Microsoft C++ compiler specific.

// Set decimal output.

cout << dec;

// Display message to user.

cout << "64-bit unsigned integer value in decimal is: " << UI64 << endl;

cout << "\n64-bit unsigned integer value in hexadecimal is: ";

// Set the uppercase flag to display hex value in capital letters.

cout << uppercase;

// Set hexadecimal output.

cout << hex;

// Set the width output to be 16 digits.

cout.width(16);

// Set the fill output to be zeros.

cout.fill('0');

// Set right justification for output.

right(cout);

// Display the 64-bit number.

cout << UI64 << endl;

You may need to (type) cast the address into a 64-bit unsigned value.
In this case, you can do the following:

// (type) cast pointer adddress into an unsigned 64-bit integer.

uint64_t UADD64 = (uint64_t)&UI64; // C99 C++ compiler specific.