簡體   English   中英

在 C++ 中通過零擴展將 char 轉換為 int

[英]Cast char to int by zero extending in C++

我想寫一個 function

int char_to_int(char c);

通過零擴展值將給定的 char 轉換為 int。 因此,如果 char 有 N 位而 int 有 M 位,M >= N,則 int 值的 MN 個最高有效位應該為零,並且 int 值的 N 個最低有效位應該與 char 值的位匹配。

這似乎是一項簡單的任務,但我不確定如何僅依靠標准行為來編寫它。 沒有 UB,沒有實現定義的行為。 不依賴於 char 是 8 位,int 是 32 位,char 是無符號的,以及我做出的任何其他常見假設都不能得到標准的保證。

我想知道這一點的原因是,我過去曾多次進行此轉換,但最近我意識到 C++ 對其數據類型提供的有限保證。 所以現在我很好奇什么是正確的、符合標准的方法。

我不認為

return (int) c;

足夠好,是嗎?

說得特別清楚沒有壞處:

return int((unsigned char)c);

這樣你就可以准確地告訴編譯器你想要什么:包含 char 值的 int,讀取為無符號。 所以 char 255 將變為 int 255。

暫無
暫無

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

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