[英]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.