-1的二進制是1111 1111,不是1000 0001喔,負數(shù)的二進制表示為其原碼的反碼再加1,
成都一家集口碑和實力的網(wǎng)站建設服務商,擁有專業(yè)的企業(yè)建站團隊和靠譜的建站技術,十多年企業(yè)及個人網(wǎng)站建設經(jīng)驗 ,為成都近1000家客戶提供網(wǎng)頁設計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設等服務,包括成都營銷型網(wǎng)站建設,高端網(wǎng)站設計,同時也為不同行業(yè)的客戶提供網(wǎng)站制作、網(wǎng)站建設的服務,包括成都電商型網(wǎng)站制作建設,裝修行業(yè)網(wǎng)站制作建設,傳統(tǒng)機械行業(yè)網(wǎng)站建設,傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設。在成都做網(wǎng)站,選網(wǎng)站制作建設服務商就選創(chuàng)新互聯(lián)公司。
正數(shù)的反碼跟原碼不變,而負數(shù)的反碼除符號位外其他位取反
-1的原碼是1000 0001,所以反碼為1111 1110,最后在加1即1111 1111
如果二進制1000 0001是一個有符號位的8位數(shù)據(jù),那么最高位為符號位,1為負數(shù)0為正數(shù)
那反過來二進制1000 0001表示成十進制就是減1在取反,
1000 0001 - 1=1000 0000
除符號位取反后為1111 1111即-127
//二進制轉十六進制
func?btox(b?string)?string?{
base,?_?:=?strconv.ParseInt(b,?2,?10)
return?strconv.FormatInt(base,?16)
}
//十六進制轉二進制
func?xtob(x?string)?string?{
base,?_?:=?strconv.ParseInt(x,?16,?10)
return?strconv.FormatInt(base,?2)
}
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)))
}
golang保存二進制文件會有大小端問題。
這個二進制文件的確有Big Endian 和Little Endian的問題,這個與CPU指令體系有關,不過不用操心,像JPEG就是Big Endian,其編解碼就都是按照這個約定來完成的,沒有平臺問題,也沒有大小端的問題。
編譯centos上的可執(zhí)行文件的時候需要交叉編譯。golang的交叉編譯很容易,你的情況的話用下面這條命令,GOOS=linux GOARCH=amd64 go build ./文件。
golang描述:
Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進程(CSP)為基礎。
采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特征,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動態(tài)加載部分函數(shù)。
與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。Go 2.0版本將支持泛型,對于斷言的存在,則持負面態(tài)度,同時也為自己不提供類型繼承來辯護。
由于我們的 Dockerfile 使用多階段構建,
由于 alpine 鏡像非常小,只有 5 mb 左右,但是由于客戶那邊強制要使用紅帽的基礎鏡像,所以在第二階段修改成紅帽的鏡像,最終打成的鏡像運行的時候會提示 No such file or directory 。
這個問題的原因在于第一階段構建的環(huán)境和第二階段的運行的環(huán)境不一致,很多時候以為都是 Linux 環(huán)境,怎么可能不一致呢,但是由于 Linux 的各個發(fā)行版都有自己定制化的部分,就譬如 alpine 分支,他的 C 語言動態(tài)鏈接庫使用的是 musl,而像 centos 用的都是 glibc,他們都是 c 語言的標準庫,用來調(diào)用操作系統(tǒng)的庫。
上面說的是一方面原因,但是不是這個問題的最具體的原因。
go build 打包出來的二進制文件還寫一個非常重要的信息 interpreter 。
我將二進制文件從容器內(nèi) copy 出來通過 file 查看
可以看到二進制的文件上有些一個解釋器的地址,這個文件地址是寫死在二進制文件上的,后面我啟動一個 centos 容器。
果然報了同樣的一個錯誤。
Linux 如何啟動一個二進制文件可以參考一下參考文檔,就是通過這個解釋器出發(fā)將程序調(diào)入內(nèi)存。
我們需要對一些文本進行"明文加密",何為"明文加密"?
從一些錯亂的數(shù)據(jù)中,提取我們想要的數(shù)據(jù).
生成錯亂的數(shù)據(jù)(可以隨機生成)
只需從上面的字符串提取數(shù)字即可,45.89.0.8
這里只是舉個簡單例子
這樣就會該go文件同級目錄生成bin文件
并未使用binary.Read()方法
讀取到的文本
再根據(jù)自己的規(guī)則去提取該字符中你想要的數(shù)據(jù)即可.
新聞標題:go語言處理二進制,go 二進制
文章地址:http://chinadenli.net/article8/hecjop.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司、面包屑導航、微信小程序、網(wǎng)站排名、定制開發(fā)、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)