小编Joh*_*can的帖子

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

我试图在 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

string hex escaping go

0
推荐指数
1
解决办法
4652
查看次数

标签 统计

escaping ×1

go ×1

hex ×1

string ×1