2017-09-18 49 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

回答