2013-06-23 78 views
14

我想將一個int16轉換爲一個字節數組,但我似乎無法得到它的工作。
這裏是我已經得到了現在:int16到字節數組

int16 i := 41 
a := []byte(string(i))//this line is wrong 

此外,如果有人想知道數組需要是2

+0

你想要int16的單個字節嗎? – fuz

回答

19

的長度如果你想獲得一個INT16的字節,嘗試一些像這樣:

var i int16 = 41 
var h, l uint8 = uint8(i>>8), uint8(i&0xff) 

Go試圖讓難以編寫依賴於您的平臺屬性(如字節順序)的程序。因此,禁止導致這種依賴性的類型雙引號(例如用int16覆蓋字節數組)。

如果你真的想在腳下拍攝自己,請試用unsafe

+0

謝謝,作品完美! :D 對不起,但我不能wote你回答,因爲我還沒有15分.. – Max

+0

@Max沒問題。玩得開心編碼! – fuz

43

雖然FUZxxl的答案的作品,你還可以使用編碼/二進制包:

var i int16 = 41 
b := make([]byte, 2) 
binary.LittleEndian.PutUint16(b, uint16(i)) 

編碼/二進制包有編碼小和大尾數爲所有固定大小的整數和一些易於使用的預建功能函數,如果您使用讀取器和寫入器而不是字節片。例如:

var i int16 = 41 
err := binary.Write(w, binary.LittleEndian, i) 
+0

這不會比僅僅移動兩個字節來形成uint16慢嗎? – fuz

+0

@fuz「簡單地移動...字節」正是這些功能所做的,所以編譯器可以選擇如果需要內聯該操作。從本質上講,你問的是,是否應該手動內聯小函數,而不是讓編譯器決定是否/何時這樣做。在大多數情況下,這個問題的答案是「不」。 – GrandOpener