2016-07-07 6 views
0

記号 "↕?0♠▬hIRW}?caq?☺?? x?"の文字列を得て、これを16進文字列に変換します。たとえば、 "☺"の変換後、変数hexは "01"になり、 ""は "00"になります。変換テーブルはここにありますhttp://www.jimprice.com/ascii-dos.gifシンボルから16進整数への変換

しかし、私はどのように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♠▬hIRW}?caq?☺?? x? 文字列output = string.Join( "、"、input.Select(x => "0x" +((byte)x).ToString( "x2"))。ToArray()); – jdweng

答えて

-1

テキストがUnicodeである可能性があります。 Encoding.DefaultはANSIコードページだと思います。それを修正する可能性があるEncoding.Unicode(または他のエンコーディングの1)を使用して

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文字として解釈して、問題をいくつかのラウンドアバウトの方法で解決できるようにします。

各文字を1バイトに変換するには、文字を1バイトにキャストするだけです。文字が0x0001で表される場合、予想通りバイト0x01にキャストされます。ただし、文字が0x263A)の場合、にキャストされます。これは、ASCIIエンコーディングを使用して:を表します。これは、ASCII文字でのみ機能します。しかし

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

、最初の場所で文字列を取り除くと、単純に文字列を作成するために使用されたバイトにアクセス:すべて一緒にそれを置く

testあなたのASCIIバイトを格納している文字列です)あなたの問題を解決する適切な方法です。

関連する問題