酷!學園

技術討論區 => 程式討論版 => C/C++程式設計討論區 => 主題作者是: aader 於 2020-09-30 00:08

主題: 救助, 可以協助指導以下函式的功能,
作者: aader2020-09-30 00:08
日前看到一行指令, 看不太懂, 還請各位大大指導

程式行 :  ((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;
}
主題: Re: 救助, 可以協助指導以下函式的功能,
作者: twu22020-10-13 08:00
& => 取得變數的記憶體位址
(uint8_t *) => 跟 compiler  說這個記憶體位址是一個陣列, 每個元素是一個 uint8_t


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