[問題] char 轉 int 取的位置不如預期

看板C_and_CPP (C/C++)作者 (喵食罐頭)時間12年前 (2013/10/17 18:06), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): typedef unsigned char byte; 我利用 byte *SrcArray = (byte*)calloc(1024L, sizeof(byte)); 動態建立了一個陣列並把資料到進去 轉換我是使用 i = ((unsigned long int *)SrcArray)[data_adds];的方式 但我發現這邊 data_adds並不是我所想像的由該位置開始往後取4個位置 例如資料是 0x00 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 0x99 0xAA 0xBB ((unsigned long int *)SrcArray)[0]取得的是 0x00112233 但 ((unsigned long int *)SrcArray)[1]取得的卻是 0x44556677 不是我所想的 0x11223344這樣 應該要用什麼作法比較合適呢? 謝謝 補充說明(Supplement): 平台為x86,輸出已做endian處理 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.241.50

10/17 18:20, , 1F
你要的是(unsigned long*)(&SrcArray[1])這樣?
10/17 18:20, 1F

10/17 18:55, , 2F
這樣是取得 SrcArray所在的記憶體位址吧
10/17 18:55, 2F

10/17 19:09, , 3F
指標的移動是以型態大小為單位,你要先以byte移動再轉型讀
10/17 19:09, 3F

10/17 19:09, , 4F
10/17 19:09, 4F

10/17 19:11, , 5F
把一樓的前面加上*就是你要的結果
10/17 19:11, 5F

10/17 20:11, , 6F
成功了,原來移動是看型態。謝謝各位
10/17 20:11, 6F
文章代碼(AID): #1INxQc60 (C_and_CPP)
文章代碼(AID): #1INxQc60 (C_and_CPP)