gpt4 book ai didi

c - 关于c printf格式

转载 作者:行者123 更新时间:2023-11-30 20:33:07 26 4
gpt4 key购买 nike

从网络接收数据流,我想打印出接收到的数据。以下是我的程序的一部分。

struct BestPriceField
{
double BidPrice1;
int BidVolume1;
double AskPrice1;
int AskVolume1;
};

// convert network order to host order (double)
double ntoh64(uint8_t *input)
{
double rval;
uint8_t *data = (uint8_t *)&rval;

data[0] = input[7];
data[1] = input[6];
data[2] = input[5];
data[3] = input[4];
data[4] = input[3];
data[5] = input[2];
data[6] = input[1];
data[7] = input[0];
return rval;
}

// get data from network data stream
struct *best_price = receive_from_network();
printf("BidPrice1:%.0lf, BidVolume1:%u, AskPrice1:%.0lf, AskVolume1:%u\n",
ntoh64((uint8_t *)&best_price->BidPrice1) ,
ntohl(best_price->BidVolume1),
ntoh64((uint8_t *)&best_price->AskPrice1) ,
ntohl(best_price->AskVolume1));
printf("BidPrice1:%.0lf, BidVolume1:%u, AskPrice1:%2X, AskVolume1:%u\n",
ntoh64((uint8_t *)&best_price->BidPrice1) ,
ntohl(best_price->BidVolume1),
ntoh64((uint8_t *)&best_price->AskPrice1) ,
ntohl(best_price->AskVolume1));

运行这段代码后,我得到了以下结果。

BidPrice1:145210, BidVolume1:3, AskPrice1:0, AskVolume1:4193532217
BidPrice1:145210, BidVolume1:3, AskPrice1:F9F43939, AskVolume1:66

我刚刚将 AskPrice1 的输出格式从 "%.01f" 更改为 "%2X",但是 的结果>AskVolume1 也已更改。

为什么会发生这种情况?

最佳答案

使用错误的格式说明符会导致 undefined behaviour 。未定义的行为意味着任何事情都可能发生。包括但不限于意外的输出。

没有理由期望第二行(或第一行,因为 undefined behaviour can time-travel )有一些特定的输出。

关于c - 关于c printf格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270255/

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