天线|RF射频
直播中

邱敏

7年用户 150经验值
私信 关注
[问答]

请问怎么通过GPRS TCP模式传递负数?

问题是这样的,我使用STM32+GPRS的板子在与另一家公司对接一个网络协议的时候,协议规定的错误码都是负数,可原先的串口发送函数USART_SendData(USART_TypeDef* USARTx, uint16_t Data)的数据类型是uint16,应该怎么办?

回帖(5)

贾利利

2019-4-25 08:08:09
1、计算机都是以补码的形式存储,正数的补码就是本身,负数的补码的是按位(最高位是符号位,符号位不取反)取反加1;
2、因此,不管发送什么数据,本质就是发送补码,比如我发送0xffff,接收端是以带符号的方式接收,那么就是-1;以无符号的方式接收就是65535;
3、故:发送时强制转换为无符号数即可;或者不需理会,函数形参类型是什么,调用时会默认转换为该类型,但有些编译器会提示警告,建议加强制转换;
比如:[C] 纯文本查看 复制代码
int i = -1;RT_SendData(uart, (uint16_t)i);//或者简单粗暴RT_SendData(uart, i);
举报

吕钢格

2019-4-25 08:22:20
signed int 是有符号的整型数
unsigned int 是无符号的整型数
举报

赵秀英

2019-4-25 08:32:58
好像是signed short int  就是 int16 ,发送这个不就行了么
举报

卞俱传

2019-4-25 08:47:52
后来自己思考了,数据的存储是不分正负的,都是01存储,关键是看接收方以什么类型接受。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分