我尝试使用整数作为字符串的数字表示形式,例如,将“ABCD”存储为 0x41424344。然而,当涉及到输出时,我必须将整数转换回 4 个 ASCII 字符。现在,我正在使用位移位和掩码,如下所示:
int value = 0x41424344;
string s = new string (
new char [] {
(char)(value >> 24),
(char)(value >> 16 & 0xFF),
(char)(value >> 8 & 0xFF),
(char)(value & 0xFF) });
Run Code Online (Sandbox Code Playgroud)
有没有更干净的方法来做到这一点?我尝试了各种转换,但编译器正如预期的那样抱怨了它。
字符是 16 位的,因此您必须将它们编码为 8 位值才能将它们打包为整数。您可以使用该类Encoding在字符和字节之间进行转换,以及BitConverter使用该类在字节和整数之间进行转换
这是两种方式的转换:
string original = "ABCD";
int number = BitConverter.ToInt32(Encoding.ASCII.GetBytes(original), 0);
string decoded = Encoding.ASCII.GetString(BitConverter.GetBytes(number));
Run Code Online (Sandbox Code Playgroud)
请注意,整数中字节的顺序取决于计算机的字节顺序。在小端系统上,“ABCD”的数值将为 0x44434241。要获得相反的顺序,您可以反转字节数组:
byte[] data = Encoding.ASCII.GetBytes(original);
Array.Reverse(data);
int number = BitConverter.ToInt32(data, 0);
byte[] data2 = BitConverter.GetBytes(number);
Array.Reverse(data2);
string decoded = Encoding.ASCII.GetString(data2);
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是框架 3.5:
int number =
BitConverter.ToInt32(Encoding.ASCII.GetBytes(original).Reverse().ToArray() , 0);
string decoded =
Encoding.ASCII.GetString(BitConverter.GetBytes(number).Reverse().ToArray());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4707 次 |
| 最近记录: |