从网络接收数据流,我想打印出接收到的数据。
以下是我程序的一部分。
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/