将char [2]转换为uint16_t进行套接字编程?

时间:2014-11-29 00:23:03

标签: c tftp

我正在写一个tftp客户端。但是当我按如下方式转换块编号时:

uint16_t blockN = buffer [2]<< 8 |缓冲液[3];

在127之后,我得到65408作为blockN。这可能是什么问题?

感谢您的回答。

2 个答案:

答案 0 :(得分:4)

您必须将buffer数组的类型从char数组更改为unsigned char数组,否则buffer[2]将被提升为int并且将发生签名扩展。在大多数平台上char类型都是签名类型。

答案 1 :(得分:0)

我通过uint16_t blockN = buffer [2]<< 8 |解决了(缓冲液[3]&安培;为0xFF);