golang保存二進(jìn)制文件會(huì)有大小端問題。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),南寧企業(yè)網(wǎng)站建設(shè),南寧品牌網(wǎng)站建設(shè),網(wǎng)站定制,南寧網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,南寧網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
這個(gè)二進(jìn)制文件的確有Big Endian 和Little Endian的問題,這個(gè)與CPU指令體系有關(guān),不過不用操心,像JPEG就是Big Endian,其編解碼就都是按照這個(gè)約定來完成的,沒有平臺(tái)問題,也沒有大小端的問題。
編譯centos上的可執(zhí)行文件的時(shí)候需要交叉編譯。golang的交叉編譯很容易,你的情況的話用下面這條命令,GOOS=linux GOARCH=amd64 go build ./文件。
golang描述:
Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ)。
采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動(dòng)態(tài)加載部分函數(shù)。
與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。Go 2.0版本將支持泛型,對于斷言的存在,則持負(fù)面態(tài)度,同時(shí)也為自己不提供類型繼承來辯護(hù)。
func ByteToBinaryString(data byte) (str string) {
var a byte
for i:=0; i 8; i++ {
a = data
data = 1
data = 1
switch (a) {
case data: str += "0"
default: str += "1"
}
data = 1
}
return str
}
//該代碼片段來自于:
使用方法package main
import . "fmt"
func main() {
Printf("[%s][%s][%s][%s]\n",
ByteToBinaryString(byte(0)),ByteToBinaryString(byte(231)),
ByteToBinaryString(byte(168)), ByteToBinaryString(byte(162)))
}
例如:把十六進(jìn)制的04271544和0209FE83轉(zhuǎn)換成二進(jìn)制。方法:首先把十六進(jìn)制數(shù)04271544中的每一位數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),每個(gè)數(shù)要分四位,不足四位的前面加零,請看下面演示:
0 0000
4 0100
2 0010
7 0111
1 0001
5 0101
4 0100
4 0100
將得出四位二進(jìn)制數(shù)串連起來就是結(jié)果了
-1的二進(jìn)制是1111 1111,不是1000 0001喔,負(fù)數(shù)的二進(jìn)制表示為其原碼的反碼再加1,
正數(shù)的反碼跟原碼不變,而負(fù)數(shù)的反碼除符號(hào)位外其他位取反
-1的原碼是1000 0001,所以反碼為1111 1110,最后在加1即1111 1111
如果二進(jìn)制1000 0001是一個(gè)有符號(hào)位的8位數(shù)據(jù),那么最高位為符號(hào)位,1為負(fù)數(shù)0為正數(shù)
那反過來二進(jìn)制1000 0001表示成十進(jìn)制就是減1在取反,
1000 0001 - 1=1000 0000
除符號(hào)位取反后為1111 1111即-127