sp #f在C#?

时间:2008-11-23 21:46:16

标签: c# string printf

C#中是否有与sprintf()类似的内容?

我希望将整数转换为2字节的字节数组。

类似的东西:

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

3 个答案:

答案 0 :(得分:27)

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版本更灵活。

答案 1 :(得分:4)

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

要将int转换为字节数组,您可以使用:

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指出的那样,结果将消耗4个字节,因为.NET中的每个字符都是2个字节(UTF-16)(包括保存字符串长度的两个字节,它将是6个字节)。

答案 2 :(得分:3)

事实证明,我真正想要的是:

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

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