C语言, 关于16进制的串口发送的问题
已给函数voidsend_data_uart(unsignedcharword),可以将一个字节的数据通过串口发送,现在我有一个十进制数为123456789,对应的16进...
已给函数void send_data_uart(unsigned char word),可以将一个字节的数据通过串口发送,现在我有一个十进制数为123456789,对应的16进制数为75BCD15,我如何通过串口发送数据,使得上位机以十六进制接收到的数据格式为0x15,0xCD,0x5B,0x07呢?脑子有点迷糊~请大家指教~~
展开
5个回答
展开全部
先定义一个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 );
请将贴结给楼上,我认为它的方法一效果更好
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 );
请将贴结给楼上,我认为它的方法一效果更好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多谢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] );
第一种较通用,第二种发送顺序跟大小端有关系。
第一种方法:
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] );
第一种较通用,第二种发送顺序跟大小端有关系。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以这么写:
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)就行了,
这下就没问题了,有什么不清楚的可以再问。
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)就行了,
这下就没问题了,有什么不清楚的可以再问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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个字节的数据,然后通过循环连续发送。
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个字节的数据,然后通过循环连续发送。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询