在 C 中将 ASCII 数转换为十六进制

Convert Ascii number to Hex in C

本文关键字:转换 十六进制 ASCII 中将      更新时间:2023-10-16

我使用以下函数将十六进制的值转换为 ASCII:

void hex_to_ascii(unsigned char* buf, unsigned char number)
{
  int i;
  sprintf(  buf, "%03d", number );
  printf("nNumber in Ascii: ");
  for( i=0; i< 3; i++)
     printf("%#04x ", *(buf+i));
  printf("n");
  return;
}

例如,如果十六进制值0xff则函数生成0x32 0x35 0x35这是255的 ASCII 表示。

现在我想反转操作。我想要一个可以传递三个字节(3 个数组(来生成十六进制值的函数。

即我们传递0x32 0x35 0x34,它会产生0xFE.

你能帮我这个吗?它是针对嵌入式系统的,这些值不是类型化的,而是从通信缓冲区获得的。

非常感谢。

编辑:

我写了这个,它似乎有效..

unsigned char ascii_to_hex(unsigned char* buf)
{
   unsigned char hundred, ten, unit, value;
   hundred = (*buf-0x30)*100;
   ten = (*(buf + 1)-0x30)*10;
   unit = *(buf+2)-0x30;     
   value = (hundred + ten + unit);
   printf("nValue: %#04x n", value);
   return value; 
}

感谢大家的回复。

您需要在 base10 中构建一个数字,考虑到您将所有数字存储在 char*buf 中,如下所示:

//assumtions: n - number of digits
//            digits are ordered MSD first -> buff[0] contains the most significant digit.
 for(i=0;i<n;i++)
    {
       number += buf[n-i-1]*pow(10,i); //number+=digit*10^i
    }
    printf("%xn", number);

您可以使用 stdlib 的 atoi(( 函数将字符串转换为整数:

char str[] = {0x32, 0x35, 0x34, 0x00};
int integer = atoi(str);
printf("%xn", integer);

然后你可以 printf(( 该整数作为十六进制/十进制或其他任何东西。如果这对于您的需求来说太简单了,那么更强大的替代方案是使用 sscanf((

如果您从通信缓冲区获取这些整数字符串,那么您可能希望先将缓冲区拆分为单独的数字(例如,它们可能用空格分隔(。在 C 语言中执行此操作的一种简单方法是使用 strtok((。

编辑:此编辑是为了响应您添加到问题中的代码。我不能评论你的问题,因为我没有足够的声誉!您添加的代码已损坏。仅当提供三位字符串(例如"001"、"255"(时,它才有效。如果提供了不同数量的数字,它将读取字符串末尾并产生垃圾输出,请尝试"1"或"14"或"12314"。