从32位整数转换为4个字符
时间:2020-03-06 14:35:58 来源:igfitidea点击:
在C#中将32位整数分为四个(无符号)字符的最佳方法是什么。
解决方案
尚不清楚这是否真的是我们想要的,但是:
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字符的最低范围。
得到8个字节的块:
int a = i & 255; // bin 11111111 int b = i & 65280; // bin 1111111100000000
一定要将前三个字节分解为一个字节,然后将它们除以适当的数字,然后再执行另一个逻辑运算即可得到最后一个字节。
编辑:Jason的带位移的解决方案当然要好得多。
?也许我们正在寻找这个方便的小助手功能?
Byte[] b = BitConverter.GetBytes(i); Char c = (Char)b[0]; [...]
快速肮脏:
int value = 0x48454C4F; Console.WriteLine(Encoding.ASCII.GetString( BitConverter.GetBytes(value).Reverse().ToArray() ));
将int转换为字节,以正确的顺序反转字节数组,然后从中获取ASCII字符表示。
编辑:反向方法是.NET 3.5的扩展方法,仅供参考。在方案中也可能不需要反转字节顺序。
大卫,干杯
位转换器
.net使用Unicode,一个char是2个字节而不是1
要在包含非Unicode文本的二进制数据之间进行转换,请使用System.Text.Encoding类。
如果我们确实想要4个字节而不是char,则在Jason的答案中将char替换为byte
我已经尝试了几种方法,并记下了转换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; }
位移,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; }