21

sprintf()C#に似たものはありますか?

たとえば、整数を 2 バイトのバイト配列に変換したいと思います。

何かのようなもの:

int number = 17;
byte[] s = sprintf("%2c", number);
4

3 に答える 3

29
string s = string.Format("{0:00}", number)

最初の 0 は「最初の引数」(つまり数値) を意味します。コロンの後の 00 はフォーマット指定子 (2 桁の数字) です。

ただし、.NET 文字列は UTF-16 であるため、2 文字の文字列は 2 バイトではなく 4 バイトであることに注意してください。

(編集: 質問が からstringに変更されましたbyte[])

バイトを取得するには、次を使用しますEncoding

byte[] raw = Encoding.UTF8.GetBytes(s);

(明らかに、エンコーディングが異なると結果が異なる場合があります。UTF8 では、このデータに 2 バイトが与えられます)

実際、最初のビットの短いバージョンは次のとおりです。

string s = number.ToString("00");

しかし、string.Formatバージョンはより柔軟です。

于 2008-11-23T21:49:48.443 に答える
4

編集:整数の値をバイト配列に変換し、最初に文字列に変換してからバイト配列に変換するのではないと仮定しています(後者については、マークの回答を確認してください。)

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 バイトになります)。

于 2008-11-23T22:12:18.977 に答える
3

私が本当に欲しかったのはこれであることが判明しました:

short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();

ここで重要なのは BinaryWriter クラスの Write 関数です。18 個のオーバーロードがあり、さまざまな形式をストリームに書き込むバイト配列に変換します。私の場合、書き込みたい数値が短いデータ型に保持されていることを確認する必要があります。これにより、Write 関数は 2 バイトを書き込みます。

于 2008-11-23T22:14:51.513 に答える