golang獲取補碼,原碼

package main

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

func main() {
	var a = []byte{0x15, 0x4B}
	var b = []byte{0xE0, 0x15}
	// fmt.Println(fmt.Sprintf("%.16b", 0x154B))
	fmt.Println(GetYuanMa(a), GetYuanMa(b))

}
// 當data爲原碼時,輸出補碼
func GetBuMa(data []byte) uint16 {
	var ym uint16
	bm := binary.BigEndian.Uint16(data)
	var bitNum = len(data) * 8
	f := "%." + strconv.Itoa(bitNum) + "b"
	bmStr := fmt.Sprintf(f, bm)
	if string(bmStr[0]) == "1" {
		ym = ^bm + 1
	} else {
		ym = bm
	}
	return ym
}

// 當data爲補碼時,輸出原碼。
// 原理: 補碼的補碼爲原碼
func GetYuanMa(data []byte) uint16 {
    return GetBuMa(data)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章