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 个字符的字符串是 4 个字节,而不是 2

(编辑:问题从更改stringbyte[]

要获取字节,请使用Encoding

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

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

实际上,第一位的较短版本是:

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

string.Format版本更灵活。

于 2008-11-23T21:49:48.443 回答
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 个字节)。

于 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-function。它有 18 个重载,将不同的格式转换为写入流的字节数组。在我的情况下,我必须确保我要写入的数字保存在一个短数据类型中,这将使 Write 函数写入 2 个字节。

于 2008-11-23T22:14:51.513 回答