我正在写一个tftp客户端。但是当我按如下方式转换块编号时:
uint16_t blockN = buffer [2]<< 8 |缓冲液[3];
在127之后,我得到65408作为blockN。这可能是什么问题?
感谢您的回答。
答案 0 :(得分:4)
您必须将buffer
数组的类型从char
数组更改为unsigned char
数组,否则buffer[2]
将被提升为int
并且将发生签名扩展。在大多数平台上char
类型都是签名类型。
答案 1 :(得分:0)
我通过uint16_t blockN = buffer [2]<< 8 |解决了(缓冲液[3]&安培;为0xFF);