我试图做一个程序,它在一个整数值,然后打印出每一个十六进制的四个字节的值。因此,对于255应该打印出来FF 00 00 00这是我的代码看起来像至今。
#include "pch.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int num;
cout << "Enter an integer" << endl;
cin >> num;
int* p = #
unsigned char* q = (unsigned char*)p;
for (int i = 0; i < 4; i++) {
cout<< hex <<*(int*)(q+i) << " ";
}
}
当我输入255它打印ff cc000000 cccc0000 cccccc00
什么是C的?
在你cout
声明,您是铸造(q+i)
本身的int*
指针,然后解引用它来得到一个int
值。这是不对的,因为(q+i)
不会在int
点带面,提领它因此将超过num
的边界进入i > 0
时,周围的内存。
你需要,而不是取消引用(q+i)
原样得到它实际上指向unsigned char
,然后该值转换为一个[unsigned
] int
(或至少一个[unsigned
] short
)在印刷时:
cout << hex << static_cast<int>(*(q+i)) << " ";
而且,int
在所有系统并不总是4个字节,所以你不应该硬编码的大小,使用sizeof(int)
代替:
for (int i = 0; i < sizeof(num); i++)
该CC
s是未初始化的堆栈存储器标签,通过Visual C++ in debug mode设置。
请注意,您还严格走样违规在(int*)(q+i)
。
你可能想是这样的:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int num;
cout << "Enter an integer" << endl;
cin >> num;
unsigned char* q = (unsigned char*)#
for (int i = 0; i < 4; i++) {
cout << hex << (int)q[i] << " ";
}
}