C#中是否有类似于sprintf()的函数?
例如,我想将整数转换为2字节的字节数组。
类似于:
int number = 17;
byte[] s = sprintf("%2c", number);
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
的版本更加灵活。
编辑:我假设您想要将整数的值转换为字节数组,而不是先将其转换为字符串,然后再转换为字节数组(请查看marc的答案以了解后者)。
要将int转换为byte数组,您可以使用以下代码:
byte[] array = BitConverter.GetBytes(17);
但这将给你一个由4个字节组成的数组,而不是2个(因为int是32位的)。 要获得由2个字节组成的数组,你应该使用:
byte[] array = BitConverter.GetBytes((short)17);
string result = string.Format("{0:00}", 17);
但是,正如Marc所指出的那样,由于.NET中的每个字符都是2个字节(UTF-16),所以结果将占用4个字节(包括保存字符串长度的两个字节,总共6个字节)。
short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();
这里的关键是BinaryWriter类的Write函数。它有18个重载,将不同格式转换为字节数组并写入流中。在我的情况下,我必须确保要写入的数字保持在short数据类型中,这将使Write函数写入2个字节。