質問
C#には sprintf()
に似たものがありますか?
たとえば、整数を2バイトのバイト配列に変換したいです。
次のようなもの:
int number = 17;
byte[] s = sprintf("%2c", number);
解決 3
結局、私が本当に欲しかったのはこれでした:
short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();
ここで重要なのは、BinaryWriterクラスの書き込み関数です。オーバーロードが18個あり、さまざまな形式をストリームに書き込むバイト配列に変換します。私の場合、書き込みたい数値が短いデータ型に保持されていることを確認する必要があります。これにより、書き込み関数は2バイトを書き込みます。
他のヒント
string s = string.Format("{0:00}", number)
最初の0は、「最初の引数」を意味します。 (つまり番号);コロンの後の00はフォーマット指定子(2桁の数字)です。
ただし、.NET文字列はUTF-16であるため、2文字の文字列は2バイトではなく4バイトであることに注意してください
(編集:質問が string
から byte []
に変更)
バイトを取得するには、エンコード
を使用します:
byte[] raw = Encoding.UTF8.GetBytes(s);
(明らかに異なるエンコーディングは異なる結果をもたらす可能性があります; UTF8はこのデータに対して2バイトを与えます)
実際には、最初のビットの短いバージョンは次のとおりです。
string s = number.ToString("00");
しかし、 string.Format
バージョンはより柔軟です。
編集:整数の値を文字列に変換してからバイト配列に変換するのではなく、バイト配列に変換することを想定しています(後者についてはmarcの答えを確認してください。)
intをバイト配列に変換するには、次を使用します。
byte[] array = BitConverter.GetBytes(17);
しかし、これは2ではなく4バイトの配列を提供します(intは32ビットなので)。 2バイトの配列を取得するには、次を使用する必要があります。
byte[] array = BitConverter.GetBytes((short)17);
値17を2文字に変換する場合は、次を使用します。
string result = string.Format("{0:00}", 17);
しかし、marcが指摘したように、.NETの各文字は2バイト(UTF-16)であるため、結果は4バイトを消費します(文字列の長さを保持する2バイトを含めると、6バイトになります)。