0

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

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

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

谢谢您的回答。

4

2 回答 2

4

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

于 2014-11-29T00:25:49.757 回答
0

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

于 2014-11-29T00:39:27.060 回答