十進数の任意の整数の種類は、一般的な数値タイプに変換するための一般的な方法です.

4253 ワード

十進数を任意の他の常用進数に変換します.一般的に、Convert.ToStringの1つの重み付け関数を使用して完成することができます.http://msdn.microsoft.com/zh-cn/library/8s62fh68.aspx(具体的なコードと関数ステートメントは、提供されたMSDNの例を参照してください.)
今はお客さんから質問があります.あなたのCovertはbyte、intまたはlongタイプしか受けられません.他のタイプの数字はどうしますか?記号付きのintやlongに強制的に変換する必要がありますか?強制転換の間に損失があれば誰が賠償しますか?ふふっ
ここではらんまのお客さんから「頭から棒を食らった」という言葉があります.私を呼んでください.この問題を解決するには、BitConverterという種類の方法でGetByttesを借りることができます.この方法の原理は以下の通りです.
1)十進数10があると仮定します.
2)8 bitは1バイト(byte)であるため、GetBytesは1 byte配列(10,0,0,0)を返します.つまり、10進数を2進数に変換し、右から左に8 bitずつ1バイト目からメモリユニットにbyteとして保存します.(戻るbyte配列の長さ(個数)は、変換された数字のタイプ自体の長さに依存し、例えば、intは4バイトの配列(uintを含む)を返し、longは8バイトの配列を返すなど).
乱馬客が引用した答えは次の通りです.
[C菗]
string s = String.Empty;

foreach (byte b in BitConverter.GetBytes(10))
{
s += Convert.ToString(b, 2).PadLeft(8, '0');
}
Console.WriteLine(s);
[VB.NET]
Dim s As String = [String].Empty
For Each b As Byte In BitConverter.GetBytes(10)
s += Convert.ToString(b, 2).PadLeft(8, "0"C)
Next
Console.WriteLine(s)
このようにするのはもちろん完全に正しいです.ただ「見る感がよくない」と書いています.一番低いのは永遠に前に置いています.このように一番左は2の0乗(またはMのN-1乗)です.
形式を表す.だからアルゴリズムを改善して、これでいいです.
[C菗]
int unum = 0;
byte[] bytes = BitConverter.GetBytes(unum);
string s = "";

foreach (var item in bytes)
{
s = Convert.ToString(item, 2).PadLeft(8, '0') + s; //2 16 8
}

Console.WriteLine(s);
[VB.NET]
Dim unum As Integer = 0
Dim bytes As Byte() = BitConverter.GetBytes(unum)
Dim s As String = ""

For Each item As var In bytes
s = Convert.ToString(item, 2).PadLeft(8, "0"C) & s '2 16 8
Next
Console.WriteLine(s)