C语言 字节数组转为字符串

本文章适用场景:

#include <stdio.h>

int main(void)
{
    printf("\tmain enter \n");
    char* test1[128] = {0x11,0x22,0x33,0x44,0x55};
    
    printf("111 test1: %s\n",test1);
    printf("222 test1: %.2x %.2x %.2x %.2x %.2x\n",         test1[0],test1[1],test1[2],test1[3],test1[4]);

    return 0;
}

编译命令:gcc test.c -o test

编译后执行结果:

我们发现自己数组test1无法用%s方式打印,如果想把字节数组转发为字符串可以用%s方式输出,利用如下代码即可。

话不多说贴代码:

int main(void)
{
unsigned char src[6] = { 0x12, 0x00, 0x56, 0x78, 0x90, 0xab };
char s[13] = { 0 };  //注意字符串申请的空间,以防越界,无论使用实体数组还是动态申请malloc方式,空间应该为字节数组长度*2+1
int i;
char c1, c2;


for (i = 0; i < 6; i++)
{
c1 = src[i] & 0xFu;
c2 = (src[i] >> 4) & 0xFu;
sprintf(s + i * 2, "%x%x", c2, c1);
}
printf("!! %s\n",s);
printf("len %d\n",strlen(s));
return 0;
}
//1200567890ab

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 要将字节数组转换成字符串,可以使用 sprintf 函数。该函数会将格式化的字符串输出到指定的字符数组中。具体的代码如下: ```c unsigned char bytes[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f}; char str[sizeof(bytes)*2+1]; // 字符数组大小为字节数组大小的两倍,加上一个结束符 '\0' // 将字节数组转换成字符串 sprintf(str, "%02x%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4]); printf("bytes to string: %s\n", str); ``` 要将字符串换成字节数组,可以使用 sscanf 函数。该函数可以从输入字符串中读取指定格式的数据并存储到指定的变量中。具体的代码如下: ```c char str[] = "48656c6c6f"; // 要转换的字符串 unsigned char bytes[sizeof(str)/2]; // 字节数组大小为字符串长度的一半 // 将字符串换成字节数组 sscanf(str, "%2hhx%2hhx%2hhx%2hhx%2hhx", &bytes[0], &bytes[1], &bytes[2], &bytes[3], &bytes[4]); printf("string to bytes: "); for (int i = 0; i < sizeof(bytes); i++) { printf("%02x ", bytes[i]); } printf("\n"); ``` 需要注意的是,这里使用了格式化字符串来指定字节数组字符串之间的转换格式。%02x 表示以 16 进制形式输出 2 位数,不足 2 位时用 0 填充。%hhx 表示读取一个无符号 char 类型的变量,并以 16 进制形式存储。同时,在 sscanf 函数中需要使用取地址符 & 来传递字节数组的元素。 ### 回答2: C语言中,字节数组字符串之间的相互转换可以使用一些内置的函数和方法来实现。以下是一种常见的方法: 1. 将字节数组转换为字符串: 可以使用C语言中的`sprintf`函数来将字节数组转换为字符串。`sprintf`函数是一个格式化输出函数,可以将格式化的数据输出到字符串中。 示例代码如下: ```c unsigned char byteArr[] = {65, 66, 67, 0}; // 字节数组 char str[64]; // 存储转换后的字符串 sprintf(str, "%s", byteArr); // 将字节数组转换为字符串 printf("转换后的字符串:%s\n", str); ``` 2. 将字符串转换为字节数组: 可以使用C语言中的`strcpy`函数将字符串复制到字节数组中。`strcpy`函数可以将一个字符串复制到另一个字符串中。 示例代码如下: ```c char str[] = "ABC"; // 字符串 unsigned char byteArr[64]; // 存储转换后的字节数组 strcpy(byteArr, str); // 将字符串复制到字节数组中 for(int i = 0; i < strlen(str); i++) { printf("%d ", byteArr[i]); // 输出转换后的字节数组 } ``` 请注意,在进行字节数组字符串的转换过程中,应确保字节数组的结束符为`'\0'`,并且字节数组字符串的存储空间要足够容纳转换后的数据。 ### 回答3: C语言中的字节数组字符串可以互相转换。 将字节数组转换为字符串时,需要使用字符串结束符'\0'来标识字符串的结束。可以通过将每个字节与字符类型相互转换,逐个拼接成字符串。例如,假设有一个字节数组arr,其长度为n,可以使用下面的代码将其转换为字符串str: ```c char str[n + 1]; // 加1是为了留位置给字符串结束符'\0' for (int i = 0; i < n; i++) { str[i] = (char)arr[i]; // 将字节转换为字符 } str[n] = '\0'; // 设置字符串结束符 ``` 将字符串转换为字节数组时,需要使用相反的操作,将字符串中的每个字符转换为对应的字节。同样,需要注意最后一个字节后面要加上'\0'作为结束标志。假设有一个字符串str,可以使用下面的代码将其转换为字节数组arr: ```c int n = strlen(str); // 获取字符串长度 unsigned char arr[n + 1]; // 加1是为了留位置给字节数组的结束标志'\0' for (int i = 0; i < n; i++) { arr[i] = (unsigned char)str[i]; // 将字符转换为字节 } arr[n] = '\0'; // 设置字节数组的结束标志 ``` 需要注意的是,转换过程中可能需要进行类型转换,特别是从字节到字符的转换时,需要将字节的符号位考虑在内。另外,在将字符串转换为字节数组时,需确保字节数组的长度足够大,可以容纳字符串以及结束标志。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值