我试图将一个字节流赋值给一个structure.The流,因为我可以在调试窗口中查看它,但是当我试图打印它时,结构没有正确地显示8字节整数值。
输出:
serial no :: 1
Timestamp :: -1541974141
userid :: 0代码:
#include <QCoreApplication>
#pragma pack(push,1)
struct info
{
int serialno;
long long timestamp;
int userid;
};
#pragma (pop)
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
unsigned char arr[16];
arr[0] = 0x01;
arr[1] = 0x00;
arr[2] = 0x00;
arr[3] = 0x00;
arr[4] = 0x83;
arr[5] = 0x57;
arr[6] = 0x17;
arr[7] = 0xA4;
arr[8] = 0xF6;
arr[9] = 0x00;
arr[10] = 0x00;
arr[11] = 0x00;
arr[12] = 0x00;
arr[13] = 0x00;
arr[14] = 0x00;
arr[15] = 0x00;
info *var;
var = (info*)&arr[0];
printf("serial no :: %d\n",var->serialno);
printf("Timestamp :: %d\n",var->timestamp);
printf("userid :: %d\n",var->userid);
return a.exec();
}发布于 2013-07-29 07:15:01
这就是为什么printf()和朋友们感到沮丧的原因。它们不安全。%d打印一个int。您正在传递一个long long,因此printf()的内部元素将其截断为int部分。
使用std::cout代替,它将使用适当大小的重载:
#include <iostream>
std::cout << "serial no :: " << var->serialno << '\n';
std::cout << "Timestamp :: " << var->timestamp << '\n';
std::cout << "userid :: " << var->userid << '\n';发布于 2013-07-29 07:12:20
阅读恩典,这是因为系统的架构,你看到的是这样的行为
在大端元中,整数值存储在内存中,地址从低到高。在一个小终端系统上,反之亦然。
https://stackoverflow.com/questions/17917941
复制相似问题