首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt中打印8字节整数时出错

在Qt中打印8字节整数时出错
EN

Stack Overflow用户
提问于 2013-07-29 07:08:46
回答 2查看 180关注 0票数 1

我试图将一个字节流赋值给一个structure.The流,因为我可以在调试窗口中查看它,但是当我试图打印它时,结构没有正确地显示8字节整数值。

输出:

代码语言:javascript
复制
serial no :: 1
Timestamp :: -1541974141
userid :: 0

代码:

代码语言:javascript
复制
#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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-29 07:15:01

这就是为什么printf()和朋友们感到沮丧的原因。它们不安全。%d打印一个int。您正在传递一个long long,因此printf()的内部元素将其截断为int部分。

使用std::cout代替,它将使用适当大小的重载:

代码语言:javascript
复制
#include <iostream>

std::cout << "serial no :: " << var->serialno << '\n';
std::cout << "Timestamp :: " << var->timestamp << '\n';
std::cout << "userid :: " << var->userid << '\n';
票数 1
EN

Stack Overflow用户

发布于 2013-07-29 07:12:20

阅读恩典,这是因为系统的架构,你看到的是这样的行为

在大端元中,整数值存储在内存中,地址从低到高。在一个小终端系统上,反之亦然。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17917941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档