原始字節我有一個結構,看起來像這樣:充分利用包裝的結構
#[repr(packed)]
struct Header {
some: u8,
thing: u8,
}
我怎樣才能從它那裏得到原始字節,那我可以用任何一個C庫或插座互動?
我希望用transmute
來解決問題,但不幸的是,這並不工作:
let header = Header {....}
let header_bytes: &[u8] = unsafe { mem::transmute(header) };
let result = self.socket.write(header_bytes);
這種失敗
error: transmute called on types with different sizes: &Header (64 bits) to &[u8] (128 bits)
你有沒有機會知道現在應該怎麼做?檢查它說'std :: slice :: raw :: buf_as_slice'的文檔已被棄用,但不提供任何其他選擇。 – 2016-03-08 17:09:29
@HarveyAdcock,我已經更新了Rust最新的答案。在穩定的語言中,從原始指針獲取切片的首選方法是'std :: slice :: from_raw_parts()'。 – 2016-03-08 20:16:56
感謝您的更新。如果這不是一個好主意,那麼如果我試圖將堆棧中的結構複製到更持久的受管理的內存部分中,您還有什麼建議?我正在做一個簡單的內存分配器,所以我想我必須處理像這樣複製字節。 – 2016-03-09 00:08:21