C#中是否有類似於sprintf()
的東西?我想例如將整數轉換爲2字節的字節數組。在C#中的sprintf?
是這樣的:
int number = 17;
byte[] s = sprintf("%2c", number);
C#中是否有類似於sprintf()
的東西?我想例如將整數轉換爲2字節的字節數組。在C#中的sprintf?
是這樣的:
int number = 17;
byte[] s = sprintf("%2c", number);
原來,這是我真正想要的是這樣的:
short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();
這裏的關鍵是類的BinaryWriter的寫入功能。它有18個重載,將不同的格式轉換爲寫入流的字節數組。在我的情況下,我必須確保我想寫的數字保持在一個簡短的數據類型,這將使寫功能寫入2個字節。
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
版本更加靈活。
編輯:我假設你想要一個整數的值轉換爲字節數組,而不是轉換爲一個字符串,然後再以一個字節數組值(查馬克的答案是後者。)
爲int轉換爲字節陣列可以使用:(因爲一個int是32位)
byte[] array = BitConverter.GetBytes(17);
但是,這將使你的4個字節的數組,而不是2 要獲得的2數組您應該使用的字節:
byte[] array = BitConverter.GetBytes((short)17);
如果你只是想轉換值17爲兩個字符,然後使用:
string result = string.Format("{0:00}", 17);
但正如馬克指出,結果會消耗4個字節,因爲在.NET中每個字符爲2個字節(UTF-16) (包括保存字符串長度的兩個字節將是6個字節)。
我更新了你的編輯(字節[] vs字符串)的答案 – 2008-11-23 22:04:01
請澄清,如果你想int作爲字節數組,或者如果你想int轉換爲字符串,然後轉換爲字節數組 – Yona 2008-11-23 22:18:38