我试图转义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”十六进制转义的问题就出现了。而不是正确地转义到一个Ú值,它被转义为Replace(替换字符)。
我保证这是什么存在的在下面的操场例如:
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编写)。
这里是操场链接:https://play.golang.org/p/c-XMK68maX
'\ xDA' _is_一个有效的十六进制转义。 '符文(218)'的utf8编码是'\ xc3 \ x9a'。我不确定你期望在这里发生什么。 – JimB
我可能会误解,但我期待'fmt.Println(“\ xDA”)'输出'Ú'而不是' ' –