簡體   English   中英

在char *和UBYTE *之間進行類型轉換(未簽名的char *)

[英]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 charunsigned char是要在其上執行算術的小寬度整數

暫無
暫無

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

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