在C#中将32位整数分成四个(无符号)字符的最佳方法是什么。
答案 0 :(得分:7)
Quick'n'dirty:
int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
BitConverter.GetBytes(value).Reverse().ToArray()
));
将int转换为字节,将字节数组反转为正确的顺序,然后从中获取ASCII字符表示。
编辑:反向方法是.NET 3.5的扩展方法,仅供参考。在您的方案中也可能不需要反转字节顺序。
干杯,大卫
答案 1 :(得分:5)
字符?也许你正在寻找这个方便的小助手功能?
Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]
答案 2 :(得分: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字符的最低范围。
答案 3 :(得分:4)
我尝试了几种方法,并计算了转换1000000英寸的时间。
内置转换方法,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 ticks:
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;
}
答案 4 :(得分:0)
获得8字节块:
int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000
将前三个字节分解为单个字节,只需将它们除以正确的数字并执行另一个逻辑并获得最后一个字节。
编辑:当然,杰森用比特移位的解决方案更好。
答案 5 :(得分:0)
BitConverter
答案 6 :(得分:0)
.net使用Unicode,char是2个字节而不是1
要在包含非unicode文本的二进制数据之间进行转换,请使用System.Text.Encoding类。
如果你确实需要4个字节而不是字符,那么在杰森的答案中用字节替换字符