作者 主題: 救助, 可以協助指導以下函式的功能,  (閱讀 230 次)

0 會員 與 1 訪客 正在閱讀本文。

aader

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
日前看到一行指令, 看不太懂, 還請各位大大指導

程式行 :  ((uint8_t *)&result)[0] = f.read();
(uint8_t *) 是強制轉型嗎? &result 是指result 的位址嗎? ((uint8_t *)&result) 又代表什麼? 為何還有陣列[0]? 實在看不懂

完整函數如下
uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read(); // MSB
  return result;
}

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5404
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: 救助, 可以協助指導以下函式的功能,
« 回覆 #1 於: 2020-10-13 08:00 »
& => 取得變數的記憶體位址
(uint8_t *) => 跟 compiler  說這個記憶體位址是一個陣列, 每個元素是一個 uint8_t
  • => 第一個元素.


整個做的事就是透過 f.read() 讀進四個 uint8_t 大小的資料, 塞到 uint32_t 的變數裡頭.