在C#中的sprintf等效方法是什么?

22

C#中是否有类似于sprintf()的函数?

例如,我想将整数转换为2字节的字节数组。

类似于:

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

我针对你的编辑更新了我的回答(byte[] vs string)。 - Marc Gravell
请澄清您是想将int转换为字节数组,还是先将int转换为字符串,再将其转换为字节数组。 - Yona
3个回答

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

第一个0表示“第一个参数”(即数字);冒号后面的00是格式说明符(2个数字位)。但请注意,.NET字符串是UTF-16编码,因此一个2个字符的字符串占用4个字节,而不是2个字节。

(编辑:问题已从string更改为byte[]

要获取字节,请使用Encoding

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

显然不同的编码可能会产生不同的结果; UTF8将为此数据提供2个字节。

实际上,第一部分的较短版本如下:

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

然而,string.Format的版本更加灵活。


4

编辑:我假设您想要将整数的值转换为字节数组,而不是先将其转换为字符串,然后再转换为字节数组(请查看marc的答案以了解后者)。

要将int转换为byte数组,您可以使用以下代码:

byte[] array = BitConverter.GetBytes(17);

但这将给你一个由4个字节组成的数组,而不是2个(因为int是32位的)。 要获得由2个字节组成的数组,你应该使用:

byte[] array = BitConverter.GetBytes((short)17);

如果您只想将值17转换为两个字符,请使用以下代码:
string result = string.Format("{0:00}", 17);

但是,正如Marc所指出的那样,由于.NET中的每个字符都是2个字节(UTF-16),所以结果将占用4个字节(包括保存字符串长度的两个字节,总共6个字节)。


3
结果证明,我真正想要的是这个:
short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();

这里的关键是BinaryWriter类的Write函数。它有18个重载,将不同格式转换为字节数组并写入流中。在我的情况下,我必须确保要写入的数字保持在short数据类型中,这将使Write函数写入2个字节。


如果您正在使用流,则您的解决方案非常有效,但是对于简单的转换,您可以使用BitConverter类(请查看我的答案)。 - Yona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接