/
getNeg.go
60 lines (53 loc) · 1.02 KB
/
getNeg.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package util
import (
"fmt"
"log"
"math"
"strconv"
"strings"
)
func GetNegative (s string) float64{
er :=fmt.Sprintf("%b",HexDec(s))
shi :=Str2DEC(er[1:])
a :=fmt.Sprintf("%b",shi-1)
return float64(0-ByBitNegation(a))
}
//十六转十进制
func HexDec(h string) (n int64) {
s := strings.Split(strings.ToUpper(h), "")
l := len(s)
i := 0
d := float64(0)
hex := map[string]string{"A": "10", "B": "11", "C": "12", "D": "13", "E": "14", "F": "15"}
for i = 0; i < l; i++ {
c := s[i]
if v, ok := hex[c]; ok {
c = v
}
f, err := strconv.ParseFloat(c, 10)
if err != nil {
log.Println("Hexadecimal to decimal error:", err.Error())
return -1
}
d += f * math.Pow(16, float64(l-i-1))
}
return int64(d)
}
func Str2DEC(s string) (num int) {
l := len(s)
for i := l - 1; i >= 0; i-- {
num += (int(s[l-i-1]) & 0xf) << uint8(i)
}
return
}
func ByBitNegation(s string)(num int){
val :=""
for i := 0; i < len(s); i++ {
if s[i:i+1] == "0"{
val = val+"1"
}else{
val = val+"0"
}
}
return Str2DEC(val)
}