c语言中如何将十六进制转换成2个字节输出

main()
{ typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
uint32_t MSGLEGTH=0x9001;
char msg[1];
char han[1];
int len= sprintf(msg,"%2c",MSGLEGTH);
printf("msg=%s,len=%d\n",msg,len);

}
我运行后怎么是msg= len=2,msg里怎么空的啊,谁能帮我找找原因,然后帮加以修改。

MSGLEGTH = 0x9001;
如果转换成char*字符串形式,内存中保存是什么数据呢 例如有可能是 0x00 0x00 0x90 0x01,
这样转换的字符可能就是 0x00 0x00 这样肯定打印不出来,即使是0x90,0x01也是不可见字符。

LZ希望打印出9001吧。其实先建立个16进制的表

char hex[]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

然后一位一位解析

例如 int i = 78908 16进制 0x1343c
int j;

第一个字节
j = 78908 %16;
可以输出hex[j];

i = i /16;

以此类推,把前面的字符取出来。追问

我这个主要是一个协议里的一个消息ID0x9001,放在一条消息中,占两个字节,怎么样能让接收端直接接收到就是9001.

追答

接收端接收到的就是0x9001,你只要考虑你发送出去的是低字节在前还是高字节在前就可以了,接收方按照你的发送方式组合成数字就是你要传送的数字,如果你要打印显示出去,可以使用上面的办法,或者使用printf(“%04x”, 0x9001)也可以。

追问

那我怎么判断哪个字节在前呢

追答

自己写个数据传过去看看,例如0x1234接收到的第一个字节是什么不就知道了吗?类似测试CPU存储类型的大端小端的都可以直接测试。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-05

  

  c语言将成2个字节输出,参考代码如下:

  char msg[]={0x01,0x02,0x03, 0x04};
  for(i=0;i*2<3;i++)
  {
       printf("0x%02x%02x\n",msg[i*2],msg[i*2+1]);
  }

第2个回答  2013-03-14
printf("msg=%s,len=%d\n",msg,len);
s%是输出字符串,并且字符串以'\0'结束,char msg[1];是一个字符,
printf("msg=%c,len=%d\n",msg,len);
看数值的话
printf("msg=%d,len=%d\n",(int *)msg,len);追问

我这个主要是一个协议里的一个消息ID0x9001,放在一条消息中,占两个字节,怎么样能让接收端直接接收到就是9001.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网