簡體   English   中英

有沒有一種簡單的方法可以將帶符號的char轉換為沒有符號擴展名的int?

[英]Is there a simple way to convert a signed char to an int without sign extension?

在C語言中,我想將一個帶signed char轉換為一個int不帶符號擴展名。 因此,如果帶signed char為0xFF,則int也將為0xFF。 僅僅將其轉換為一個int無效。 結果將是0xFFFFFFFF(在32位計算機上)。

這似乎可行(並且已經非常簡單):

int convert(signed char sc) {
    return 0xFF & (int) sc; 
}

但是,有沒有一種更簡單或更習慣的方式?

編輯:固定功能

您可以先轉換為unsigned char 假設一個定義:

signed char c;

您可以這樣做:

int i = (unsigned char)c;

您還可以使用聯合(行為是實現定義的,但編譯器在很大程度上支持該行為)。

int
convert(signed char ch)
{
    union {
        signed char c1;
        int c2;
    } input = { ch };
    return input.c2;
}

或者,正如Carl Norum所說,您可以簡單地將其轉換為unsigned char

int 
convert(signed char ch)
{
    return (int)(unsigned char)ch;
}

但請注意,因為有一個0xFF char值(十進制255)溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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