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")
"xD"16 진수 이스케이프를 해석 할 때 문제가 발생합니다. 정확하게 Ú 값으로 이스케이프하는 대신 (대체 문자)로 이스 케이 핑됩니다. ,
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'이 유효한 진수 이스케이프를 _is_ :
다음은 run on the Playground 수있는 예시입니다. 'rune (218)'의 utf8 인코딩은'\ xc3 \ x9a'입니다.네가 여기서 무슨 일이 일어날 지 모르겠다. – JimB
나는 실수를 할 수는 있었지만 'fmt.Println ("\ xDA")'가' ''대신에 'Ú'을 출력 할 것을 기대하고 있었다. –