gpt4 book ai didi

c++ - Qt打印8字节整数错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:44 25 4
gpt4 key购买 nike

我试图将一个字节流分配给一个结构。流正确地进入结构,因为我可以在调试窗口中看到它,但是当我试图打印它时,结构没有正确显示 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();
}

最佳答案

这就是为什么 printf() 和 friend 们望而却步的原因。它们不是类型安全的。 %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';

关于c++ - Qt打印8字节整数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com