[英]Type casting between char* and UBYTE* (unsigned char*)
背景:作為套接字會話的一部分,我收到的數組為char *。 現在我們必須從中匹配Tokens(HTTP標頭)。這里的代碼是我們創建了一個UBYTE *,並在用UBYTE進行類型轉換后從char數組中獲取值。 稍后,我們將傳遞給另一個函數的UBYTE指針傳遞給將char *類型轉換為char *之后接受char *的其他函數。
這里的問題是這在發行版本中有效,而在調試版本中不起作用(使用-g和不同的優化方法)。 在調試模式下添加少量打印件不僅隱藏了問題。
所以我的問題是,UByte指針(本質上是無符號字符)和char指針之間有什么區別? 將UByte更改為char可以在所有模式下解決我的問題,但是我對此沒有任何解釋嗎? 有什么想法嗎 ?
char *
和unsigned char *
之間的強制轉換沒有問題。 如果您遇到意想不到的行為(具體取決於優化級別),那么代碼中肯定存在一個錯誤,但可能與放棄強制轉換中的簽名無關。
除此之外, UBYTE
是一個非常荒謬的typedef,因為存在一個標准的C類型uint8_t
,它與stdint.h
定義的相同。
也許您可以首先解釋一下,盡管為什么您必須首先使用unsigned char
? 什么是行不通的呢?
void*
, char*
和unsigned char*
具有不同的語義,應根據以下條件使用它們:
void*
指向非特定數據,除非將其轉換為某種實類型,否則您將無法執行任何操作 char*
具有兩種不同的含義,要么是文本字符串,要么是非特定數據,但是可以以低(字節)級別進行尋址(修補)。 signed char
和unsigned char
是要在其上執行算術的小寬度整數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.