go - Golang 上的十六进制求和

标签 go hex

感谢阅读我的问题。 我正在尝试计算 Golang 上的 ASTM 校验和,但无法弄清楚如何将字符串或字节转换为我自己和 Google 可计算的十六进制。 请让我请求帮助,谢谢。

在 Golang 中,如何将字符转换为允许执行求和的十六进制?

例子:

// Convert character "a" to hex 0x61 ( I understand this will not work for my case as it became a string.)
hex := fmt.Sprintf("%x","a")
// sum the 0x61 with 0x01 so it will become 0x62 = "b"
fmt.Printf("%v",hex + 0x01)

非常感谢,祝您有愉快的一天。

感谢大家回答我的问题! peterSOANisus答案都解决了我的问题。请让我选择 ANisus 的回复作为答案,因为它包含 ASTM 特殊字符。我希望 StackOverflow 可以选择多个答案。感谢大家回答我,祝你有美好的一天!

最佳答案

Internet 的答案向您展示了如何将十六进制字符串转换为 int 值。

但是您的问题似乎表明您想获取字母“a”的代码点值,然后对该值进行算术运算。为此,您不需要十六进制。您可以执行以下操作:

package main

import "fmt"

func main() {
    // Get the code point value of 'a' which is 0x61
    val := 'a'

    // sum the 0x61 with 0x01 so it will become 0x62 = 'b'
    fmt.Printf("%v", string(val + 0x01))
}

结果:

b

Playground :http://play.golang.org/p/SbsUHIcrXK

编辑:

使用 here 中描述的算法对字符串进行实际的 ASTM 校验和计算可以通过以下代码完成:

package main

import (
    "fmt"
)

const (
    ETX = 0x03
    ETB = 23
    STX = 0x02
)

func ASTMCheckSum(frame string) string {

    var sumOfChars uint8

    //take each byte in the string and add the values
    for i := 0; i < len(frame) ; i++ {      
        byteVal := frame[i]
        sumOfChars += byteVal

        if byteVal == STX {
            sumOfChars = 0
        }

        if byteVal == ETX || byteVal == ETB {
            break
        }
    }

    // return as hex value in upper case
    return fmt.Sprintf("%02X", sumOfChars)
}

func main() {
    data := "\x025R|2|^^^1.0000+950+1.0|15|||^5^||V||34001637|20080516153540|20080516153602|34001637\r\x033D\r\n"
    //fmt.Println(data)
    fmt.Println(ASTMCheckSum(data))
}

结果:

3D

Playground :http://play.golang.org/p/7cbwryZk8r

关于go - Golang 上的十六进制求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447263/

相关文章:

GoSonar : how to generate go test -json > report. json

Golang 保持活力

javascript - 压缩字母数字字符,限制为 8 个字节的十六进制字符

c++ - 长十六进制值的 vector

将字符串转换为带有转义序列的字符串

c - struct_ 前缀与无前缀

在 linux 上正确运行程序,但在 windows 上不能

http - HTTP ResponseWriter 的 write 函数会在 Go 中缓冲吗?

c++ - 从 char 数组中提取十六进制数字

java - 从 ASCII 转换为十六进制并再次转换回来时丢失左引号