簡體   English   中英

將'char *'轉換為'signed char *'

[英]cast 'char *' to 'signed char *'

在C中將char *類型轉換為signed char *是否存在任何危險,其中char數組被解釋為字節數組。

我在gcc中讀過, char類型可以是無符號的,也可以是簽名的,具體取決於系統。 在'最壞'的情況下, char *將是一個unsigned char * ,但由於該數組只被解釋為一系列位,因此類型從無符號到有符號無關緊要。

(順便說一句,我已經檢查了其他帖子,但我只看到了問題:將unsigned charsigned char ,我想知道是否有任何特殊的純粹char 。請提前感謝。)

轉換本身應該沒有任何問題,特別是如果你只是將數組解釋為字節。 在這種情況下,雖然我建議您考慮使用C99類型uint8_tint8_t來更好地傳達您的意圖,如果它們可供您使用。

沒有危險,它明確允許在所有三種char類型中重新解釋char指針,並且還將任何對象指針重新解釋為char指針(因此將任何對象視為字節數組)。

在分配后有一些邊緣情況進行比較,但是對於存儲和處理不同的功能,沒有任何危險......

在您的實現中,默認情況下char可能是簽名或未簽名的...

比較和簽名問題的示例:

在MacOS X上使用c99中的clang

char * dog = malloc(1);
dog[0]= 0xff;
unsigned char * mansBestFriend = dog;

if (mansBestFriend[0] > dog[0]) {
    puts("boy that is strange");
}

輸出:奇怪的男孩

由於C中有時令人困惑的比較規則,比較的方式可能看起來很奇怪。

還有很多其他時候會發生這種情況,而我永遠無法記住的是其中一個值比另一個大,一個是簽名而另一個不是......的情況。如果您正在對不同類型進行比較,那么要明確。

不,這樣做沒有危險,因為您只想將其用作字節值。

暫無
暫無

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

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