簡體   English   中英

將一個int指針轉換為char ptr,反之亦然

[英]Casting an int pointer to a char ptr and vice versa

問題很簡單。 據我了解,GCC堅持認為字符將是字節對齊的,並且在32位環境中對齊4字節對齊。 我也知道C99標准6.3.2.3,它表示在未對齊的指針類型之間進行轉換會導致未定義的操作。 C的其他標准對此有何評論? 這里也有許多經驗豐富的編碼員 - 對此有任何看法將不勝感激。

int *iptr1, *iptr2;
char *cptr1, *cptr2;

iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;

C只有一個標准(ISO標准),有兩個版本(1989年和1999年),還有一些非常小的版本。 所有版本和修訂都同意以下內容:

  • 所有數據存儲器都是字節可尋址的,而字符是字節
  • 因此char*將能夠處理任何數據
    • void*char*相同,除了與它之間的轉換不需要類型轉換
  • int*轉換為char*總是有效,轉換回int*
  • 將任意char*轉換為int*並不能保證正常工作

保證char指針的工作原理是這樣的,例如,你可以從內存中的任何地方將整數復制到內存或磁盤中的其他地方,然后返回,這在低級別中是非常有用的。編程,例如圖形庫。

CPU有big-endian和little-endian,因此結果未定義。 例如,對於轉換后的char指針,0x01234567的值可以是0x12或0x67。

你可以試試:

iptr1 = atoi(cptr1); // val now = pointed by cptr1
cptr2 = atoi(iptr2); // val now = pointed by iptr2

這在DevCpp中對我有用!

暫無
暫無

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

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