Re: c30 陣列與強制轉型及指標的問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
int_a = *(unsigned int *)&data[1];
只是把unsigned char變成unsigned int的格式。High byte補0。 我左看右看都不會覺得存取到data[2]的資料。不知道你「照理說」是照什麼理?這個你要去看一下c語言的書去瞭解一下轉型到底是怎樣一回事情。 用一個照你的理來說好了。
char data[] = {-1,-2,-3,-4,-5,-6,-7,-8};
你覺得這個int_a等於多少?
發表於: 2008/11/6 20:17
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
Re: c30 陣列與強制轉型及指標的問題
|
||||
---|---|---|---|---|
資深會員
|
可是…我是組合語言自吃耶^^"
可不可以直接說明呢?謝謝 我在pc端的程式(BCB)也遇到相同的問題,就是如果要將BYTE的陣列強制轉型的話,那麼陣列的位址也一定要是0或是偶數的才可以。 我在想…會不會是C COMPILER的規則?。 參照:
發表於: 2008/11/6 19:12
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|
Re: c30 陣列與強制轉型及指標的問題
|
||||
---|---|---|---|---|
資深會員
|
把Disassembly視窗打開看應該就能瞭解了....XD
發表於: 2008/9/9 22:43
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
c30 陣列與強制轉型及指標的問題
|
||||
---|---|---|---|---|
資深會員
|
MCU是24H(16 bits)
Compiler是C30 //----------------------------------------------- // //----------------------------------------------- void func1(void) { unsigned char data[] = {1,2,3,4,5,6,7,8}; unsigned int int_a, int_b;//sizeof(int) = 2 bytes int_a = *(unsigned int *)&data[1]; int_b = *(unsigned int *)&data[2]; //照理說int_a會 = 0x0302;但是實際結果好像不會是如此?不知道為什麼? //難道一定要這樣子嗎?陣列的起始一定要是0或是雙數才可以嗎? int_a = *(unsigned int *)&data[0]; //這種問題我要怎麼解決呢? //我現在的解決方式是 int_a = (data[2] << 8) + data[1]; //不過這樣又太麻煩了。 //不知道有什麼好方法?謝謝 }
發表於: 2008/9/9 20:05
|
|||
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已… 解決問題最重要,..... |
||||
|