C 如何将数组中的 ASCII 数字转换为文本

C How to convert ASCII numbers in an array to text

如何将这个包含 ASCII 数字的数组转换为文本,以便每个数字都变成一个字母。所以“72”得到H,101得到E等等。

int a[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};

可以遍历数组,使用%c格式化参数打印int值的ascii字符

for (int i = 0 ; i < 11; i ++){
   printf("%c", a[i]);
}
  1. C字符类型 C使用char类型来存储字符和字母。但是char类型是整数类型,因为C下面存储的是整数而不是字符。
int main(int argc, char *argv[], char **env) {
    int a[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
    for (int i = 0; i < sizeof a / sizeof(int); ++i) {
        printf("%c", (char) a[i]);

    }
}

C 中的一切都是数字。编译器无法分辨整数常量 72'H' 之间的区别,两者都产生一个数字,甚至它们都具有 int 类型。字符和数字格式仅在您向人类用户显示原始数据时适用。

所以没有将 72 转换为 'H',它已经是正确的格式,即原始数字 72。我们只需要告诉计算机我们希望将这个原始数字打印为一个人物。最简单的方法是 printf("%c", ...,但它需要一个 char 类型的参数。所以我们必须将 a[0]int 类型转换为 char,我们可以通过转换来完成。 printf("%c", (char)a[0]);.

如果数组是 char a[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100}; 那么就不需要转换了。

您可以使用结构数组,因为数组可能包含不同的数据类型。 试试这个:

#include <stdio.h>
struct data
{ 
    int j; 
    char c;
};
int main() 
{
    int a[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
    int size = sizeof(a)/sizeof(a[0]);
    struct data value[size];
    for(int i=0;i<size;i++)
    {
        if(a[i]>=48 && a[i]<=57)
        {
            char ch= a[i];
            value[i].j =ch; 
        }
        else
        {
            char ch= a[i];
            value[i].c =ch;  
        }
    }
    for(int i=0;i<size;i++){
         if(a[i]>=48 && a[i]<=57)
            printf("%d",value[i].j); 
        printf("%c",value[i].c); 
         }
   return 0;
}

输出将是:Hello World (希望对您有所帮助。)