我试图在 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")
Run Code Online (Sandbox Code Playgroud)
当语言解释“\xDA”十六进制转义时会出现问题。它没有正确转义为 Ú 值,而是转义为 ? (替换字符)。
我确保这是以下操场示例中发生的情况:
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))
Run Code Online (Sandbox Code Playgroud)
此代码段在运行时打印
?
Hex conf of '218' is 'da'
Ú
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?"\xDA" 被转义为 65533 的事实正在抛弃我的整个程序,它依赖于 CRC32 和一些其他校验和。这不会发生在这个程序的javascript 版本中(它本身是 James compface 程序的翻译,用 C 编写)。
这是游乐场链接:https : //play.golang.org/p/c-XMK68maX