gpt4 book ai didi

string - 转义字符串文字中的十六进制值

转载 作者:IT王子 更新时间:2023-10-29 02:26:23 25 4
gpt4 key购买 nike

我试图转义 golang 字符串中的特定十六进制值。函数调用看起来像这样:

Insert(0, "\x00\x00\x00\rIHDR\x00\x00\x000\x00\x00\x000\b\x03")
Insert(25, "\x00\x00\x00\x06PLTE")
Insert(43, "\x00\x00\x00\x02tRNS")
Insert(57, "\x00\x00\t;IDATx\xDA\x010\t\xCF\xF6") // problem line
Insert(2432, "\x00\x00\x00\x00IEND")

当语言解释“\xDA”十六进制转义时,问题就出现了。它没有正确转义为 Ú 值,而是转义为 �(替换字符)。

我确保这是在以下 Playground 示例中发生的情况:

fmt.Println("\xDA")
i := 218
h := fmt.Sprintf("%x", i)
fmt.Printf("Hex conf of '%d' is '%s'\n", i, h)
fmt.Println(string(i))

这段代码在运行时打印


Hex conf of '218' is 'da'
Ú

我是不是漏掉了什么? “\xDA” 被转义为 65533 的值这一事实正在抛弃我的整个程序,该程序依赖于 CRC32 和其他一些校验和。这不会发生在 javascript version 中这个程序(它本身是 James compface 程序的翻译,用 C 编写)。

这是 Playground 链接:https://play.golang.org/p/c-XMK68maX

最佳答案

Go 字符串只是一系列字节,但是当需要编码时,假定为 utf8。值 \xda 不是有效的 utf8 字符,因此在打印时它被转换为 unicode.ReplacementCharacter "�"

    ReplacementChar = '\uFFFD'     // Represents invalid code points.

如果你想在字符串字面量中得到\xda的 rune 值,使用unicode转义:\u00DA,或者使用utf8编码:\xc3\x9a,或使用字符本身:Ú

https://play.golang.org/p/EJZIqCI_Gr

如果您实际上想要在您的字符串中使用 \xda 的单个字节值,那么这就是您所拥有的,打印的字符是无关紧要的。

关于string - 转义字符串文字中的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com