2017-09-18 16 views
-2

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

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结果也被改变了。

为什么会发生这种情况?

+1

启用所有编译器警告。当然,他们会在'printf()'中提供关于编码错误的快速反馈。 – chux

+0

如果只有一些关于'printf'函数(以及所有其他标准函数)的信息。也许可以在网上搜索这些信息。嗯,我真的应该谷歌,如果有这样的事情... – Olaf

回答