C语言, 关于16进制的串口发送的问题

已给函数voidsend_data_uart(unsignedcharword),可以将一个字节的数据通过串口发送,现在我有一个十进制数为123456789,对应的16进... 已给函数void send_data_uart(unsigned char word),可以将一个字节的数据通过串口发送,现在我有一个十进制数为123456789,对应的16进制数为75BCD15,我如何通过串口发送数据,使得上位机以十六进制接收到的数据格式为0x15,0xCD,0x5B,0x07呢?脑子有点迷糊~请大家指教~~ 展开
 我来答
kaixingui2012
2012-09-23 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6170万
展开全部
先定义一个union { unsigned int i;unsigned char ac[4];} udata;
udata.i=1;
if ( udata.ac[0]== 1 ) //小端机,则从低到高发送
{
udata.i=123456789 ;
int j=0;
while( j<4 )
{
send_data_uart( udata.ac[j] );
j++ ;
}
}
else //大端机,从高到低发送
{
udata.i=123456789 ;
int j=4;
while( j-->0 )
{
send_data_uart( udata.ac[j] );
}

}
修正楼上的方法一,应该采用位与:
unsigned int val = 123456789;

send_data_uart( val & 0xff );
send_data_uart( (val >> 8) & 0xff );
send_data_uart( (val >> 16)& 0xff );
send_data_uart( (val >> 24)& 0xff );
请将贴结给楼上,我认为它的方法一效果更好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f00e7f36
推荐于2017-11-25 · TA获得超过117个赞
知道小有建树答主
回答量:546
采纳率:0%
帮助的人:248万
展开全部
多谢kaixingui2012 指正

第一种方法:
unsigned int val = 123456789;

send_data_uart( val & 0xff );
send_data_uart( (val >> 8) & 0xff );
send_data_uart( (val >> 16) & 0xff );
send_data_uart( (val >> 24) & 0xff );

第二种:
unsigned int val = 123456789;
unsigned char *p;

p = (unsigned char *)&val;

send_data_uart( p[0] );
send_data_uart( p[1] );
send_data_uart( p[2] );
send_data_uart( p[3] );

第一种较通用,第二种发送顺序跟大小端有关系。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上帝来自地球
2012-09-23 · TA获得超过1436个赞
知道小有建树答主
回答量:438
采纳率:100%
帮助的人:406万
展开全部
可以这么写:
void send_oct_num(long int number){
unsigned char ch;
while(number){
ch=number&0xff;
number>>=8;
send_data_uart(ch);
}
}

send_oct_num(123456789)就行了,
这下就没问题了,有什么不清楚的可以再问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
40061589
2012-09-23 · 超过16用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:43.7万
展开全部
unsigned long num;
unsigned char send_num;
num=123456789;
send_num=num&255;//0至7位
send_data_uart(send_num);//发送0x15
send_num=num>>8;//8至15位
send_data_uart(send_num);//发送0xcd
send_num=num>>16;//16至23位
send_data_uart(send_num);//发送0x5b
send_num=num>>24;//24至31位
send_data_uart(send_num);//发送0x07
或者定义一个数组得到4个字节的数据,然后通过循环连续发送。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友45a6a9d
2012-09-23
知道答主
回答量:41
采纳率:0%
帮助的人:14.9万
展开全部
没明白
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式