我試圖轉義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」)'輸出'Ú'而不是' ' –