c - 在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,0x01,0x00,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);
}
虽然迂腐,但您应该始终使用来自以下的etc 说明符从uint8_t
stdint.h 打印和其他类型:PRIx8
inttypes.h
#include <inttypes.h>
sprintf(str,"%02"PRIx8"%02"PRIx8"%02"PRIx8"%02"PRIx8"\n",
hex_in[0],hex_in[1],hex_in[2],hex_in[3]);
推荐阅读
- android - 如何为 MapBox 设置多个过滤器?
- javascript - 无法理解为什么它给了我:未捕获(承诺)类型错误:无法读取未定义的属性“blabla”
- ruby-on-rails - 使用 Rails API 创建和发送电子邮件附件的最佳实践是什么
- python - Shutil.move 不移动文件夹,而是移动文件夹的内容
- python - 使用字符串和 NaN 提取多索引 pandas 数据帧的最大值
- python - 如何使用 tf.data.Dataset.map 对两个 tf.data.Datasets 进行元素总和,两者都无限迭代?
- android - Room database with Kotlin inline class as an Entity field
- javascript - Bootstrap Carousel 堆叠图像
- javascript - 使用小书签创建弹出菜单
- python - 根据其他列中的值平均某些列