我正在编写的程序给我的规范要求我编写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
我认为它工作正常。但是我不确定。有人可以确认吗?也许有些极端情况可能会破坏该方法?
您的代码似乎不错。如果要与其他人进行比较,则可以查看some other answers。