2016-07-07 6 views
0

심볼을 "16 진수 문자열로 변환하고 싶습니다."기호의 문자열을 얻었습니다. "↕? 0 ♠ ▬hIR W}? caq? ☺ ?? x? 예를 들어, "☺"의 변환 후에 변수 hex는 "01"이 될 것이고 ""00이 될 것입니다. 변환 테이블은 여기에서 찾을 수 있습니다 http://www.jimprice.com/ascii-dos.gif16 진수로 변환하는 심볼

그러나 저는 C#으로 코드화하는 방법을 알지 못합니다. 아무도 도와 줄 수 있습니까?

string test = "☺"; 
Console.WriteLine("{0}", test); 
byte[] b = Encoding.Default.GetBytes(test); 
var hex = BitConverter.ToString(b); 
Console.WriteLine("{0}", hex); 

그 코드는 현재 가지고 있지만 "☺"는 "?"처럼 취급됩니다. "3F"를 인쇄했습니다. 미안 해요. 나는 그것이 어떤 전환인지 알지 못해서 미리 감사드립니다.

+0

이미지에서 공유 한 배열을 기호 대신 16 진 코드로 유지하십시오. 동일한 스 니펫을 사용하여 배열에서 코드를 찾습니다. –

+0

미안 @SushilMate, 나는 당신을 얻지 못한다. 테스트를위한 코드를 가지고있는 것이 가능한가? –

+0

이것을 시도하십시오 : string input = "↕? 0 ♠ ▬hIR W}? caq? ☺ ?? ¬? ♫ x"; 문자열 출력 = string.Join (",", input.Select (x => "0x"+ ((byte) x) .ToString ("x2")) .ToArray()); – jdweng

답변

-1

가능한 텍스트는 유니 코드입니다. 나는 Encoding.Default가 ANSI 코드 페이지라고 생각한다. 문제를 해결할 수 Encoding.Unicode (또는 다른 인코딩 중 하나)를 사용하여

https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode(v=vs.110).aspx

.

+0

Encoding.Default를 Encoding.Unicode 또는 다른 것 (UTF7, UTF8, UTF32 ...)으로 변경하려고 시도했습니다. 16 진수의 결과는 3A-26이됩니다. 그것에 대한 올바른 해결책과 감사가 아니야 –

+0

질문에 표시된 텍스트는 ASCII 범위, 0-127에 나타나는 문자 만 포함되어 있습니다. OP가 보여주는 테이블은 ASCII가 아니며 코드 페이지 1252 또는 이와 유사한 OEM/DOS 코드 페이지와 유사합니다. 그러나 어떤 경우에는 인코딩을 추측해도 실제로 _question_ 자체에 응답하지 않습니다. –

0

어떻게 든 문자열로 끝나는 바이트 시퀀스가 ​​있습니다. 그것은 바이트를 저장하는 올바른 방법이 아닙니다. 바이트는 8 비트 값이고 .NET 문자열을 구성하는 문자는 16 비트 값입니다. 샘플 코드에서 문자 은 문자열에 0x263A이라는 16 비트 값으로 표시되며 사용자가 예상 한대로 0x01 또는 0x0001이 아닙니다.

바이트 시퀀스와 문자열 사이를 변환하려면 인코딩이 필요합니다. 귀하의 경우에는 바이트를 ASCII 문자로 해석하여 문제를 로터리 방식으로 해결할 수 있습니다.

각 문자를 한 바이트로 변환하려면 문자를 한 바이트로 간단히 캐스팅하면됩니다. 문자가 0x0001으로 표시되면 예상대로 바이트 0x01으로 캐스팅됩니다. 그러나 문자가 0x263A () 인 경우 ASCII 인코딩을 사용하여 :을 나타내는 0x3A으로 캐스팅되어 ASCII 문자로만 작동합니다. 그러나

var bytes = test.Select(ch => (byte) ch); 
var bytesAsHexStrings = bytes.Select(b => b.ToString("X2")); 

, 첫번째 장소에있는 문자열을 제거하기 단순히 문자열을 만드는 데 사용 된 바이트에 접근 : 모두 함께 퍼팅

(test은 ASCII 바이트를 저장하는 문자열입니다) 당신의 문제를 해결하는 적절한 방법입니다.

관련 문제