-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
는 그냥
"%2X"
에
"%.01f"
AskPrice1
로부터의 출력 형식을 변경되었지만
AskVolume1
결과도 변경되었다.
왜 이런 일이 발생할 수 있습니까?
모든 컴파일러 경고를 활성화합니다. 분명히 그들은'printf()'에서 실수를 코딩하는 것에 대한 빠른 피드백을 제공 할 것이다. – chux
'printf' 함수 (및 다른 모든 표준 함수)에 관한 정보가 있다면. 그런 정보를 웹에서 검색 할 수도 있습니다. 흠, 그런 것들이 있다면 정말 google해야 ... – Olaf