我理解,从一个无符号类型到等级相等的有符号类型的强制转换会产生一个实现定义的值:
引用C99 6.3.1.3中的话:
否则,新类型为有符号类型而且该值不能在其内表示;结果不确定或者是引发实现定义的信号。
这意味着我不知道如何交换有符号数的字节顺序。例如,假设我正在从外围设备以小端序接收两个字节的二进制补码有符号值,并在大端CPU上处理它们。C库中的字节交换原语(如
引用C99 6.3.1.3中的话:
否则,新类型为有符号类型而且该值不能在其内表示;结果不确定或者是引发实现定义的信号。
这意味着我不知道如何交换有符号数的字节顺序。例如,假设我正在从外围设备以小端序接收两个字节的二进制补码有符号值,并在大端CPU上处理它们。C库中的字节交换原语(如
ntohs
)被定义为在无符号值上工作。如果我将我的数据转换为无符号数以进行字节交换,后续可靠地恢复有符号值吗?