golang文字列の特定の16進値をエスケープしようとしています。関数呼び出しは次のようになります。文字列リテラルの16進数値のエスケープ
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」進エスケープを解釈するときに問題が発生します。正しくÚ値にエスケープする代わりに、 (置換文字)にエスケープされます。
私は、これは以下の遊び場例でoccuringたものである保証:、
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にありません(それ自体はCで書かれたJames compfaceプログラムの翻訳です)。ここで
は、遊び場のリンクです:https://play.golang.org/p/c-XMK68maX
'\ xDA'は有効な16進エスケープを_is_。 'rune(218)'のutf8エンコーディングは '\ xc3 \ x9a'です。私はあなたがここで何が起こると思いますか分からない。 – JimB
私は間違っているかもしれませんが、 'fmt.Println(" \ xDA ")'が '' 'の代わりに'Ú 'を出力することを期待していました –