OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3750|回复: 5

请问如何通过GPRS(TCP模式)传递负数?

[复制链接]

10

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-1-20
在线时间
15 小时
发表于 2017-9-20 17:16:16 | 显示全部楼层 |阅读模式
5金钱
问题是这样的,我使用STM32+GPRS的板子在与另一家公司对接一个网络协议的时候,协议规定的错误码都是负数,可原先的串口发送函数USART_SendData(USART_TypeDef* USARTx, uint16_t Data)的数据类型是uint16,应该怎么办?

最佳答案

查看完整内容[请看2#楼]

1、计算机都是以补码的形式存储,正数的补码就是本身,负数的补码的是按位(最高位是符号位,符号位不取反)取反加1; 2、因此,不管发送什么数据,本质就是发送补码,比如我发送0xffff,接收端是以带符号的方式接收,那么就是-1;以无符号的方式接收就是65535; 3、故:发送时强制转换为无符号数即可;或者不需理会,函数形参类型是什么,调用时会默认转换为该类型,但有些编译器会提示警告,建议加强制转换; 比如:[mw_shl_c ...
“你要保守你的心,胜过保守一切,因为一生的果效,都是由心发出”
("Above?all?else,guard?your?heart,for?it?is?the?wellspring?of?life"---NIV)。
哭着喊着也要进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3447
金钱
3447
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-9-20 17:16:17 | 显示全部楼层
1、计算机都是以补码的形式存储,正数的补码就是本身,负数的补码的是按位(最高位是符号位,符号位不取反)取反加1;
2、因此,不管发送什么数据,本质就是发送补码,比如我发送0xffff,接收端是以带符号的方式接收,那么就是-1;以无符号的方式接收就是65535;
3、故:发送时强制转换为无符号数即可;或者不需理会,函数形参类型是什么,调用时会默认转换为该类型,但有些编译器会提示警告,建议加强制转换;
比如:[mw_shl_code=c,true]int i = -1;
RT_SendData(uart, (uint16_t)i);
//或者简单粗暴
RT_SendData(uart, i);[/mw_shl_code]
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2017-9-20 18:48:28 | 显示全部楼层
signed int 是有符号的整型数
unsigned int 是无符号的整型数
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2017-9-20 18:49:21 | 显示全部楼层
BJTT 发表于 2017-9-20 18:48
signed int 是有符号的整型数
unsigned int 是无符号的整型数

好像是signed short int  就是 int16 ,发送这个不就行了么
回复

使用道具 举报

10

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-1-20
在线时间
15 小时
 楼主| 发表于 2017-9-21 17:03:36 | 显示全部楼层
Acuity 发表于 2017-9-20 17:16
1、计算机都是以补码的形式存储,正数的补码就是本身,负数的补码的是按位(最高位是符号位,符号位不取反 ...

后来自己思考了,数据的存储是不分正负的,都是01存储,关键是看接收方以什么类型接受。
“你要保守你的心,胜过保守一切,因为一生的果效,都是由心发出”
("Above?all?else,guard?your?heart,for?it?is?the?wellspring?of?life"---NIV)。
哭着喊着也要进步。
回复

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-8-29
在线时间
32 小时
发表于 2017-9-21 18:31:11 | 显示全部楼层
最简单方式共用体存储。
[mw_shl_code=c,true]typedef union tp {
    struct{
        u8 transportData[4]
    }Source;
    int data;
}T_P;[/mw_shl_code]

存储存到 data,
传输就传输数组transportData。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 08:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表