→ dritchie: *((int*)&y)=x; 08/18 23:59
感謝回覆! ^^ y是指向該陣列的頭的位置對吧?
再取址的意義是什麼呢?
→ nimura14: 可以耶...為什麼呢? 08/19 00:06
→ nimura14: 我試過用*y = x;也可以, 可是不懂為什麼. 08/19 00:07
※ 編輯: nimura14 (118.233.74.51), 08/19/2015 00:15:59
推 stupid0319: *(int*)y = x ; 08/19 00:17
→ stupid0319: y[0] = 0xFF & x ; y[1] = 0xFF00 & x ; 08/19 00:21
→ stupid0319: y[2] = 0xFF0000 & x ; y[3] = 0xFF000000 & x; 08/19 00:22
→ stupid0319: 寫錯了,應該用>>操作,練習看看吧 08/19 00:24
推 stupid0319: 用union也可以,方法一大堆 08/19 00:27
→ nimura14: 謝謝回覆!! 08/19 00:30
推 EdisonX: 這種操作要注意的應該是 big/little endian 08/19 00:36
→ dritchie: y與&y雖然知道的位置一樣 但type不同 我為了轉型較合理 08/19 00:37
→ EdisonX: 上面兩種方法在 little endian 情況下都是反的 08/19 00:37
感謝deitchie, 我會研究看看, 真的學習了!
剛剛看了一下...第一次知道這個事實....
y的type是char *
&y的type是char *[4]
y和&y雖然位置一樣, 但是做記憶體運算時結果可是大不同...謝謝指教了!感謝
感謝EdisonX, 謝謝提醒!!
感謝stupid0319提供的1 byte 1byte搬的方式~~
※ 編輯: nimura14 (118.233.74.51), 08/19/2015 00:45:12
推 AIGecko: 假如編譯器是GCC的話可以用個神奇的指令做位元反轉 08/19 00:58
→ AIGecko: *((int*)&y)=__builtin_bswap32(x); 08/19 00:58
→ AIGecko: 舊版的不確定是否有該內建指令就是了 08/19 00:59
※ 編輯: nimura14 (118.233.74.51), 08/19/2015 01:05:24
→ nimura14: 謝謝喔!我會去看看GCC的__builtin_bswap32() 08/19 01:07
剛剛還試過以下2個方式,結果都正確, 但是觀念怪怪的
1. y[0]=x;
直接把整數x的value設給字元陣列的第一個元素.
這個方式我覺得最怪,整數是4byte, 字元是1byte, 這樣的assign方式不會溢位嗎?
2. *y = x ;
這個方式沒有做牆制型態轉換, 但結果也是對的, 編譯器也沒warning.
是因為編譯器自己幫我做了型態轉換嗎?
※ 編輯: nimura14 (118.233.74.51), 08/19/2015 01:08:15
→ EdisonX: 1.int 轉成 char 存到 y[0] 2. array dereference,未定義 08/19 01:55
推 cobrasgo: 2沒有warning嗎?回家試試 08/19 19:11
推 TobyH4cker: 兩個都是沒問題的唷 08/21 02:26
→ TobyH4cker: 1跟2都做了轉型為char再寫到陣列第一個元素的位置 08/21 02:27
→ TobyH4cker: 如果eax現在是0x00656463,那這兩行做的都是mov byte 08/21 02:30
→ TobyH4cker: ptr [ebp-4], al,al是eax的 08/21 02:30
→ TobyH4cker: 最低byte,也就是這裡的0x63 08/21 02:31