2008-11-23 207 views
20

C#中是否有類似於sprintf()的東西?我想例如將整數轉換爲2字節的字節數組。在C#中的sprintf?

是這樣的:

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

我更新了你的編輯(字節[] vs字符串)的答案 – 2008-11-23 22:04:01

+0

請澄清,如果你想int作爲字節數組,或者如果你想int轉換爲字符串,然後轉換爲字節數組 – Yona 2008-11-23 22:18:38

回答

3

原來,這是我真正想要的是這樣的:

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

這裏的關鍵是類的BinaryWriter的寫入功能。它有18個重載,將不同的格式轉換爲寫入流的字節數組。在我的情況下,我必須確保我想寫的數字保持在一個簡短的數據類型,這將使​​寫功能寫入2個字節。

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

4

編輯:我假設你想要一個整數的值轉換爲字節數組,而不是轉換爲一個字符串,然後再以一個字節數組值(查馬克的答案是後者。)

爲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個字節)。