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

main(){typedefunsignedlonguint32_t;typedefunsignedshortuint16_t;uint32_tMSGLEGTH=0x90... 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里怎么空的啊,谁能帮我找找原因,然后帮加以修改。
展开
 我来答
jay8830095
2013-03-14
知道答主
回答量:45
采纳率:0%
帮助的人:26.7万
展开全部
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)也可以。
一骑当后
2015-07-05 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40292 获赞数:306496
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部

  

  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]);
  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哎开心U
2013-03-14
知道答主
回答量:22
采纳率:0%
帮助的人:16.5万
展开全部
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.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式