2013-11-25 2 views
3

내가 같이 바이트 코드에 대한 문자열을 수신하고있어 상황이 있습니다 바이트 코드의 \ 탈출 된문자열에서 바이트 코드를 파싱 하시겠습니까?

"\\x00\\x00\\xff\n" 

.

"\\x00\\x00\\xff\n" 

나는 것 같은이 같은 문자열을 위해 그것에서 바이트를 얻을 : 난 정말이 같은 문자열을하고 싶습니다

"\x00\x00\xff".bytes # => [ 0, 0, 255 ] 

어떻게 더 나은 해당 문자열을 처리 할 수 ​​있습니까?

다른 시스템에서 UDP를 통해 전송되므로 실제로 도착한 것처럼 지저분한 이스케이프 문자열처럼 액세스 할 수 있습니다.

+1

UDP는 문자열의 형식과 아무런 차이가 없습니다. 배달 안정성에 많은 차이가 있지만 콘텐츠는 전송 된 내용과 동일하게 보장됩니다. –

+0

나는 왜 내가 처음부터 그와 같은 끈을 가지고 있는지 필연적 인 언급에 대해 변호하려고 노력했다. 그래서 나는 변명을 앞에 두었다. –

답변

1

가능성이 더 우아한 방법이있다, 그러나 이것은 당신이 시작할 수 있어야합니다

a= "\\x00\\x00\\xff\n" 
a.scan(/\\x([0-9a-f][0-9a-f])/).flatten.collect{|x| x.to_i(16)} # => [ 0, 0, 255 ] 

to.i(16)는 진수로 16 진수 문자열로 변환합니다.

이스케이프 시퀀스를 보간하는 것처럼 보입니다.

나는이 작업이 eval을 사용하여 수행 될 수 있지만 이 아니라는 것을 알고 있습니다. YAML을 통해서도 가능하다고 생각합니다.

eval("\"#{a}\"").strip.bytes.to_a # => [ 0, 0, 255] # don't use this. 

더 나은 답변을 얻기를 바랍니다.

관련 문제