2016-02-28 88 views
0

在PHP中,編碼的二進制數據,如整數,浮點數等等,我會做到以下幾點:相當於PHP的pack()?

<?php 

$uint32 = pack("V", 92301); 
$uint16 = pack("v", 65535); 
$float = pack("f", 0.0012); 

echo "uint32: " . bin2hex($uint32) . "\n"; // 8d680100 
echo "uint16: " . bin2hex($uint16) . "\n"; // ffff 
echo "float: " . bin2hex($float) . "\n"; // 52499d3a 

我怎樣才能把這個代碼放到去?

回答

2

爲什麼你需要使用pack()這樣的函數,其語言類型pack()已經是語言本身的本地類型?

要編碼二進制數據,請使用包encoding/binary。要複製您的代碼:

package main 

import (
    "bytes" 
    "encoding/binary" 
    "fmt" 
) 

func main() { 
    buf := new(bytes.Buffer) 
    byteOrder := binary.LittleEndian 

    binary.Write(buf, byteOrder, uint32(92301)) 
    fmt.Printf("uint32: %x\n", buf.Bytes()) 

    buf.Reset() 
    binary.Write(buf, byteOrder, uint16(65535)) 
    fmt.Printf("uint16: %x\n", buf.Bytes()) 

    buf.Reset() 
    binary.Write(buf, byteOrder, float32(0.0012)) 
    fmt.Printf("float: %x\n", buf.Bytes()) 
} 

playground

就這樣,這也很容易得到持續編碼等數據結構。你真的只需要將的第三個參數改爲你希望的數據類型,並且該函數將會執行all the magic

+0

令人驚歎的答案! – Twisted1919