如何在整数数组中存储字符串的 ASCII 值,而不是打印在 C ? 例如:我输入“ ABab ”并且我有一个a [4]的数组然后如何存储[0] = 67,a [1] = 66,a [2] = 97 ,a [3] = 98?
答案 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标准允许更大的值。
如果您想打印一个数字,您必须将其转换为小数位并将这些转换为字符0
到9
的(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 char
或unsigned 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
。