如何解决输入十六进制到 C 中的字符串输出
我是 C 编程的初学者。我研究了如何解决我的问题,但没有找到答案,所以我在这里问。我的问题是:
我想将十六进制数组转换为字符串。例如:
这是我的输入十六进制:uint8_t hex_in[4]={0x10,0x01,0x00,0x11};
我想像这样输出字符串:“10010011”
我尝试了一些解决方案,但它给了我“101011”作为摆脱零。
如何获取8位字符串?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(){
char dene[2];
uint8_t hex_in[4]={0x10,0x11};
//sprintf(dene,"%x%*x%x%x",dev[0],dev[1],2,dev[2],dev[3]);
//sprintf(dene,"%02x",hex_in[1]);
printf("dene %s\n",dene);
}
解决方法
为了将输出存储在字符串中,字符串必须足够大。在这种情况下,持有 8 位数字 + 空终止符。不是 2 = 1 位数字 + 空终止符。
然后您可以用 %02x
或 %02X
打印每个数字以获得 2 位数字。小写 x 给出小写 abcdef
,大写 X 给出 ABCDEF
- 否则它们是等效的。
更正的代码:
#include <stdio.h>
#include <stdint.h>
int main(void)
{
char str[9];
uint8_t hex_in[4]={0x10,0x01,0x00,0x11};
sprintf(str,"%02x%02x%02x%02x\n",hex_in[0],hex_in[1],hex_in[2],hex_in[3]);
puts(str);
}
虽然迂腐,您应该始终使用 uint8_t
中的 PRIx8
等说明符从 stdint.h 打印 inttypes.h
和其他类型:
#include <inttypes.h>
sprintf(str,"%02"PRIx8"%02"PRIx8"%02"PRIx8"%02"PRIx8"\n",hex_in[3]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。