我在构建选项中添加了-Wconversion
。第一个警告是针对此功能的(显然是为了反转字节顺序):
unsigned short reverse(unsigned short val) {
return (val<<8) | (val>>8);
}
我想我知道这里发生了什么。 val
被提升为signed int
,目的是为了转换和按位|
。然后,需要将其转换回unsigned short
。
但是,我真的没有一个很好的解决方案。如果促销永远不会发生,原始意图效果最好,但是我没有知道可以阻止它的短片后缀。想法?
答案 0 :(得分:0)
首先,我建议使用明确指定大小的类型。根据C标准unsigned short
是一种小于或等于unsigned int
且至少 16位的类型。因此,要反转无符号的16位宽整数,您应该使用uint16_t。当你执行左移时,你应该放下上半部分:
#include <stdint.h>
uint16_t reverse(uint16_t _v) {
return ((uint16_t)((_v & 0xFF) << 8) | (_v >> 8));
}
我的GCC-4.7.2使用-Wall -Wconversion -Werror干净地编译了这个文件。此外,还有htons()
and ntohs()
。