Vì vậy, tôi là một chút của một newbie để C và tôi tò mò để tìm ra lý do tại sao tôi nhận được hành vi bất thường này.Tại sao C in các giá trị hex của tôi không chính xác?
Tôi đang đọc một tệp 16 bit tại một thời điểm và chỉ in chúng ra như sau.
#include <stdio.h>
#define endian(hex) (((hex & 0x00ff) << 8) + ((hex & 0xff00) >> 8))
int main(int argc, char *argv[])
{
const int SIZE = 2;
const int NMEMB = 1;
FILE *ifp; //input file pointe
FILE *ofp; // output file pointer
int i;
short hex;
for (i = 2; i < argc; i++)
{
// Reads the header and stores the bits
ifp = fopen(argv[i], "r");
if (!ifp) return 1;
while (fread(&hex, SIZE, NMEMB, ifp))
{
printf("\n%x", hex);
printf("\n%x", endian(hex)); // this prints what I expect
printf("\n%x", hex);
hex = endian(hex);
printf("\n%x", hex);
}
}
}
Các kết quả tìm kiếm một cái gì đó như thế này:
ffffdeca
cade // expected
ffffdeca
ffffcade
0
0 // expected
0
0
600
6 // expected
600
6
bất cứ ai có thể giải thích cho tôi tại sao dòng cuối cùng trong mỗi khối không in giá trị giống như thứ hai?