[英]Is it safe to cast a character type to an integer type
int main() {
char ch = 'a';
int x;
x = ch;
printf("x=%c", x);
}
此代碼是否安全使用(考慮機器的使用壽命)?
是的,將char
類型(如char
)轉換為整數類型(如int
)是安全的。
在這個答案和其他答案中,字節序不是一個因素。
這里進行了4次轉換,並且沒有強制轉換:
a
是C編碼的字符。 'a'
在編譯時轉換為int
。
'a'
將int
轉換為char
。
char ch = 'a';
該char ch
將轉換為int x
。 從理論上講 ,從char
到int
**的數據可能會丟失,但是鑒於壓倒性的實現,沒有任何實現。 典型示例:如果char
在-128到127范圍內簽名,則可以很好地映射到int
。 如果char
在0到255范圍內是無符號的,則這也很好地映射到int
。
int x; x = ch;
printf("%c", x)
使用傳遞給它的int x
值,將其轉換為unsigned char
,然后打印該字符。 (C11dr§7.21.6.18 @haccks)請注意,由於可變參數的通常轉換,因此沒有x
的轉換,因為x
都已准備好成為int
。
printf("x=%c", x);
** char
和int
的大小可以相同,並且char
的無符號數比int
。 盡管通常不會丟失數據,但這是將char
為int
的一個潛在問題。 如果char
范圍在0到2³²-1之間,並且int
的范圍是-(2³¹-1)到+(2³¹-1),則這可能會更加復雜。 我知道沒有這樣的機器。
是的,將整數類型轉換為更大的整數類型始終是安全的。
標准庫的*getc
(fgetc,getchar,...)函數就是這樣做的-它們在內部讀取unsigned chars
並將其unsigned chars
轉換為int
因為int
為編碼EOF(文件末尾,通常為EOF ==-1)提供了額外的空間。
是的,因為int
大於char
,但出於相同的原因,使用char
代替int
並不安全。
這里很安全,因為在調用printf
時, char
始終會轉換為int
。
請參閱C ++可變參數
您首先要做的是=
int x = ch
=>將char的ascii值分配給int
最后: printf("x=%c", x);
=>將ascii值打印為一個char,這將打印與該值相對應的實際char。 是的,這樣做是安全的,這完全是可預防的行為。
但是安全並不意味着有用,因為整數大於char,通常我們做相反的操作以節省一些內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.