二进制文件读取,将2个字节转换为一个unsigned short C

Binary file reading, convert 2 bytes to an unsigned short C

我在一次读取 2 个字节并将其转换为无符号短大端字节序时遇到问题。

这是我现在的代码,我也想打印unsigned short big endian,应该是数字25。

所以这段代码是读取一个二进制文件,我把所有的文件都保存到一个buffer中,我需要buffer[5]和buffer[6]到unsigned short, big endian

void read_binair(const char* filename)
    {
        FILE *file;
        char *buffer;
        unsigned long fileLen;
        int i;
        char character;
        Level* level = level_alloc_empty();

        file = fopen(filename, "rb");
        if (!file)
        {
            fprintf(stderr, "Unable to open file %s", filename);
            return;
        }



        fseek(file, 0, SEEK_END);
        fileLen = ftell(file);
        fseek(file, 0, SEEK_SET);


        buffer = (char *)malloc(fileLen + 1);
        if (!buffer)
        {
            fprintf(stderr, "Memory error!");
            fclose(file);
            return;
        }



        fread(buffer, fileLen, 1, file);
        for (i = 0; i < 4; i++) 
        {   
            printf("%c", (char) buffer[i]);
        }
        i = buffer[4];
        printf("%d", i);
        //read buffer[5] and buffer[6] together as a unsigned short, big endian
        fclose(file);
    }

以下代码将从 buffer 中的大端创建一个 unsigned short

unsigned short us = (buffer[5] << 8) | buffer[6];

假设 -

  1. 您正在使用支持 C99 的编译器,并且
  2. 文件中的数据是网络字节序

你需要-

uint16_t half_word = ((uint8_t)buffer[5] << 8) | ((uint8_t)buffer[6])

P.S。 -