gpt4 book ai didi

c - 将字符串写入十六进制转换器

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:01 25 4
gpt4 key购买 nike

我尝试编写一个字符串到十六进制转换器并成功转换

input : abcde

但是输出的是字符串类型

Output : "6162636465"

我需要转换后的值采用以下形式:

uint8_t in[] = { 0x61, 0x62, 0x63, 0x64, 0x65}

如何将它从字符串转换为 uint8

代码如下:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[] )
{
unsigned char str[100],strH[200];
int i,j;
strcpy(str, argv[1]);
//printf("Enter string: ");
//scanf("%[^\n]s",str);

printf("\nString is: %s\n",str);

/*set strH with nulls*/
memset(strH,0,sizeof(strH));

/*converting str character into Hex and adding into strH*/
for(i=0,j=0;i<strlen(str);i++,j+=2)
{
sprintf((char*)strH+j,"%02X",str[i]);
}
strH[j]='\0'; /*adding NULL in the end*/

printf("Hexadecimal converted string is: \n");
printf("%s\n",strH);


return 0;
}

最佳答案

如果您要存储字节:

0x61, 0x62, 0x63, 0x64, 0x65

abcdeuint8_t 数组中,您没有执行任何类型的十六进制转换,您只是存储 a、b、 c, d, e 在你的数组中。如果那是你的目标,你可以简单地通过将每个字符的值分配给你的数组来实现,例如:

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <inttypes.h>

int main (int argc, char **argv) {

if (argc < 2) {
fprintf (stderr, "error: insufficient input, %s <hexval>\n", argv[0]);
return 1;
}
char *s = argv[1];
size_t i = 0,
len = strlen (s);
uint8_t bytes[len];

for (i = 0; i < len; i++)
bytes[i] = s[i]; /* simply store the ASCII value of each char */

for (i = 0; i < len; i++)
printf (" 0x%02" PRIx8, bytes[i]);
putchar ('\n');

return 0;
}

(uint8_t bytes[] 数组上方包含您输入的 ASCII 值)

示例使用/输出

$ ./bin/strtoasciibytes abcde
0x61 0x62 0x63 0x64 0x65

如果您需要验证字符并将其转换为它们的“十六进制” 值,那么您可以简单地将数字转换为小写,对于0-9,只需分配s[i] - '0' 并且对于 a-f 存储 s[i] - 'a' + 10。如果字符在转换为小写后不符合这些范围中的任何一个,则它不是十六进制字符。 (注意一个字节可以由 2 个字符组成)

让我知道您是否正在尝试这样做,或者您是否真的需要将每个字符转换为十六进制而不是 ASCII 值。

关于c - 将字符串写入十六进制转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com