2008-09-23 121 views
5

在C#中將32位整數分成四個(無符號)字符的最佳方式是什麼?從32位整數轉換爲4個字符

+0

你所期望的字符是什麼成爲? ASCII字節的解釋? – 2008-09-23 13:41:06

+0

你是指字符或字節?字符是給定編碼中文本的單個字符,可能對應於多個字節 - 可能不是您想要的。 – 2008-09-23 14:03:09

回答

7

Quick'n'dirty:

int value = 0x48454C4F; 
Console.WriteLine(Encoding.ASCII.GetString(
    BitConverter.GetBytes(value).Reverse().ToArray() 
)); 

整型轉換爲字節,扭轉了字節陣列,用於以正確的順序,然後讓從它的ASCII字符表示。

編輯:Reverse方法是.NET 3.5的擴展方法,僅供參考。在您的方案中也可能不需要反轉字節順序。

乾杯,大衛

+0

只是將它們打印到控制檯的最終目標是什麼?如果沒有,與Jason和Sam的建議相比,這種方法有很多不必要的開銷。 – Kip 2008-09-23 14:40:16

4

目前尚不清楚,如果這是你想要真的什麼,但:

int x = yourNumber(); 
char a = (char)(x & 0xff); 
char b = (char)((x >> 8) & 0xff); 
char c = (char)((x >> 16) & 0xff); 
char d = (char)((x >> 24) & 0xff); 

這是假設你想解釋爲最低範圍的Unicode字符的字節。

0

做得到的8字節塊:

int a = i & 255; // bin 11111111 
int b = i & 65280; // bin 1111111100000000 

做下來打破了前三個字節到一個字節,只需通過適當的數量將它們劃分和執行另外一個邏輯,並讓您的最後一個字節。

編輯:Jason的解決方案與bitshifts當然更好。

5

Char?也許你正在尋找這個方便的小幫手功能?

Byte[] b = BitConverter.GetBytes(i); 
Char c = (Char)b[0]; 
[...] 
0

BitConverter

0

.NET使用Unicode,炭是2個字節不是1

向含有非unicode文本使用System.Text.Encoding類的二進制數據之間進行轉換。

如果你要4個字節,而不是字符,然後替換字節炭在傑森的回答

4

我已經嘗試了一些方法和主頻轉換百萬整數所花費的時間。

內置轉換方法,325000種蜱:

Encoding.ASCII.GetChars(BitConverter.GetBytes(x)); 

指針轉換100000種蜱:

static unsafe char[] ToChars(int x) 
{ 
    byte* p = (byte*)&x) 
    char[] chars = new char[4]; 
    chars[0] = (char)*p++; 
    chars[1] = (char)*p++; 
    chars[2] = (char)*p++; 
    chars[3] = (char)*p; 

    return chars; 
} 

Bitshifting,77000種蜱:

public static char[] ToCharsBitShift(int x) 
{ 
    char[] chars = new char[4]; 
    chars[0] = (char)(x & 0xFF); 
    chars[1] = (char)(x >> 8 & 0xFF); 
    chars[2] = (char)(x >> 16 & 0xFF); 
    chars[3] = (char)(x >> 24 & 0xFF); 
    return chars; 
} 
相關問題