簡體   English   中英

將字符類型轉換為整數類型是否安全?

[英]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次轉換,並且沒有強制轉換:

  1. a是C編碼的字符。 'a'在編譯時轉換為int

     'a' 
  2. int轉換為char

     char ch = 'a'; 
  3. char ch將轉換為int x 理論上講 ,從charint **的數據可能會丟失,但是鑒於壓倒性的實現,沒有任何實現。 典型示例:如果char在-128到127范圍內簽名,則可以很好地映射到int 如果char在0到255范圍內是無符號的,則這也很好地映射到int

     int x; x = ch; 
  4. printf("%c", x)使用傳遞給它的int x值,將其轉換為unsigned char ,然后打印該字符。 (C11dr§7.21.6.18 @haccks)請注意,由於可變參數的通常轉換,因此沒有x的轉換,因為x都已准備好成為int

     printf("x=%c", x); 

** charint的大小可以相同,並且char的無符號數比int 盡管通常不會丟失數據,但這是將charint的一個潛在問題。 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM