私の変数はテキストを保持していますが、現在intとして格納されています(使用されるクラスはメモリアドレスのバイトを読み取り、intに変換します。Variable.ToStringは10進表現を表示するだけですが、読み取り可能なテキストにエンコードしません。つまり、asciiエンコーディングなどを使用してデータをintからstringに変換したいと思います。
5 に答える
int変数を想定
int x=10;
これを文字列に変換できます
string strX = x.ToString();
これを試して
string s = "9quali52ty3";
byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
foreach(byte b in ASCIIValues) {
Console.WriteLine(b);
}
これがデモです(上記のQ + Aに基づいています)。
注:テストとしてnullターミネータを使用して文字列を設定し、ASCIIバイトにエンコードしてから、安全でない(プロジェクトプロパティのビルドオプションで許可する必要があります)を使用して、各バイトを反復処理し、0x0に達するまで変換します。
private void button1_Click(object sender, EventArgs e)
{
var ok = "OK" + (char)0;
var ascii = Encoding.ASCII;
var bin = ascii.GetBytes( ok );
var sb = new StringBuilder();
unsafe
{
fixed (byte* p = bin)
{
byte b = 1;
var i = 0;
while (b != 0)
{
b = p[i];
if (b != 0) sb.Append( ascii.GetString( new[] {b} ) );
i++;
}
}
}
Console.WriteLine(sb);
}
FIXEDステートメントに注意してください。これは必須です。マネージドストリング/アレイなどは、メモリに静的に配置されることが保証されていません。これにより、そのセクションで確実に配置されます。
前の質問から判断すると、あなたが持っているintは(おそらく)文字列へのポインタです。ポインタのデータがcharsであるかbytesであるかに応じて、次のいずれかを実行して文字列を取得します。
var s = new string((char*)myInt);
var s = new string((sbyte*)myInt);
Int32.ToString()には、フォーマット文字列を受け取るオーバーロードがあります。使用可能なフォーマット文字列を確認し、そのうちの1つを使用してください。
わかった。変数がポインターの場合、Timは正しい方向を指しています(アドレスであり、アドレスからのオフセットではないと仮定します。この場合、オフセットする開始アドレスが必要になります)。
一方、変数に4つのエンコードされたASCII文字(それぞれ1バイト)が含まれている場合は、バイトに分割し、各バイトを文字に変換する必要があります。Console.WriteLine(TypeDescriptor.GetConverter(myUint).ConvertTo(myUint, typeof(string)));
ここからこのようなもの-MSDNByteConverter