如何在C中处理char(而不是char数组)类型的多字符变量?

时间:2017-05-29 00:49:20

标签: char ascii

我试过这个

#include<stdio.h>



int main(void){

char charVal1 = '1';
char charVal2 = '91';

printf("%d\n", charVal1);
printf("%d", charVal2);
}

第一个printf语句的输出是49.但是另一个显示14641.如何将91转换为14641?此外,有时它表明隐式转换导致溢出,输出为49。

1 个答案:

答案 0 :(得分:1)

在您的系统中,角色&#39; 1&#39;被编码为49.C要求字符&#39; 1&#39; ...&#39; 9&#39;按照这个顺序和连续的,你的系统&#39; 9&#39;被编码为57.所以,&#39; 91&#39;编码为57后跟49.在十六进制中,此0x39后跟0x31。如果您考虑使用big-endian字节排序的双字节整数(可能是系统上的short [aka short int]),则为0x3931或14641.因此您的计算机使用big-endian字节排序。

&#39; 91&#39;是一个值为14641的int。在我的系统上,int大于charchar为-128到128,因此为char分配一个超出该范围的整数,给出编译器警告。

现在,您的格式化打印调用使用&#34;%d&#34;格式说明符,用于正常长度的整数。这意味着它会将系统上的整数转换为十进制并输出多个字节。但是,您传递char值,因此它将这些值打印为整数,或91和14641.

你可能意味着更像这样的东西:

char[] strVal1 = "1";
char[] strVal2 = "91";

printf("%s\n", strVal1);
printf("%s", strVal2);