从缓冲区读取一个小尾数整数

问题描述 投票:0回答:1

我正在编写的程序给我的规范要求我编写2种方法来交换16位和32位无符号整数的字节序。第一个参数是2个uint8_t整数的数组。第二个参数是4个uint8_t整数的数组。可以以小端或大端格式输入参数,然后将它们转换为其他格式。下面是我的代码:

uint16_t swap_16(uint8_t buffer[2]) {
  uint16_t ans;
  ans = (uint16_t) (buffer[1] << 8) | buffer[0];
  return ans;
}

uint32_t swap_32(uint8_t buffer[4]) {
  uint8_t buf_2[] = {buffer[0], buffer[1]};
  uint8_t buf_3[] = {buffer[2], buffer[3]};

  uint16_t first_swap = swap_16(buf_2);
  uint16_t second_swap = swap_16(buf_3);

  uint32_t ans = (uint32_t) (second_swap << 16) | first_swap;

  return ans;
}

我尝试使用此主要方法测试它们:

int main()
{
    uint8_t a = 0x01;
    uint8_t b = 0x23;
    uint8_t c = 0x45;
    uint8_t d = 0x67;

    uint8_t buffer[4] = {a,b,c,d};
    uint32_t ans = swap_32(buffer);

    printf("%x",ans);

    return 0;
}

上述主要方法的输出为

67452301

同样,如果我将buffer [4]更改为

uint8_t buffer[4] = {d, c, b, a};

输出为

1234567

我认为它工作正常。但是我不确定。有人可以确认吗?也许有些极端情况可能会破坏该方法?

c endianness
1个回答
0
投票

您的代码似乎不错。如果要与其他人进行比较,则可以查看some other answers

© www.soinside.com 2019 - 2024. All rights reserved.