2008-09-23 53 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; 
} 
相关问题