在C中以字符串形式存储字符串的ASCII值

时间:2017-10-09 12:18:27

标签: c arrays string char ascii

如何在整数数组中存储字符串 ASCII 值,而不是打印 C ? 例如:我输入“ ABab ”并且我有一个a [4]的数组然后如何存储[0] = 67,a [1] = 66,a [2] = 97 ,a [3] = 98?

3 个答案:

答案 0 :(得分:2)

它已经按照你提到的方式存储了:字符串是char的数组,char是整数。

答案 1 :(得分:0)

我想你知道计算机可以处理“ bi nary digi t bit s)”,所以你已经问过自己计算机如何存储角色

答案是:那就像ASCII那样的字符编码意味着:它们为每个字符分配一个唯一的数字,而数字是存储的数字!

由于C几乎可以在任何机器/系统/操作系统上运行,因此它没有指定对字符使用哪种编码,它只是指定了这种编码必须满足的一些属性。 ASCII只包含128个不同的代码(可以用7位表示的数量),所以现在使用比ASCII更大的编码,但概率非常接近1 ,你的系统使用编码包括 ASCII(通常这将是UTF-8)。

因此,正如已经评论过的那样,当您读取char数组中的字符时,已经最终会存储存储在那里的ASCII值。 char是C中最小的整数类型,对应于一个字节 - 字节正好是存储字符表示所需的位数。这几乎总是8位,但C标准允许更大的值。

如果您想打印一个数字,您必须将其转换为小数位并将这些转换为字符09的(ASCII)代码。当然,C已经有一个功能为您执行此操作:printf()具有合适的格式字符串。要打印字节/ char的十进制值,您只需执行以下操作:

char c = 'A';
printf("%hhu", (unsigned char)c);

u是无符号整数的转换说明符,hh将参数的长度修改为char,并将char转换为unsigned char因为C允许char 签名无符号。

答案 2 :(得分:0)

您可以使用循环将字符串的元素复制到int类型的数组中。

例如

#include <stdio.h?

int main( void )
{
    char *s = "ABab";
    int a[4];
    const size_t N = sizeof(a) / sizeof(*a);

    size_t i = 0;

    for (; i < N && s[i] != '\0'; i++) a[i] = s[i];
    while (i != N) a[i] = 0;

    for (i = 0; i < N; i++) printf("%d ", a[i]);
    putchar('\n');

    return 0;
}

程序输出

65 66 97 98

如果您需要将字符数组输出为整数而不是符号表示,那么您只需编写

即可
#include <stdio.h?

int main( void )
{
    char *s = "ABab";

    for ( size_t i = 0; s[i] != '\0'; i++) printf("%d ", s[i]);
    putchar('\n');

    return 0;
}

考虑到char类型可以表现为signed charunsigned char类型。如果要将字符存储或输出为无符号值,则应在第一个程序中编写

for (; i < N && s[i] != '\0'; i++) a[i] = ( unsigned char )s[i];

并在第二个程序中

for ( size_t i = 0; s[i] != '\0'; i++) printf("%d ", ( unsigned char )s[i]);

那就是你需要明确地char投射到unsigned char