我尝试使用整数作为字符串的数字表示形式,例如,将“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) });
有没有更干净的方法来做到这一点?我尝试了各种类型转换,但正如预期的那样,编译器对此进行了提示。
最佳答案
字符是 16 位的,因此您必须将它们编码为 8 位值才能将它们打包为整数。您可以使用 Encoding
类在字符和字节之间进行转换,并使用 BitConverter
类在字节和整数之间进行转换
这是两种方式的转换:
string original = "ABCD";
int number = BitConverter.ToInt32(Encoding.ASCII.GetBytes(original), 0);
string decoded = Encoding.ASCII.GetString(BitConverter.GetBytes(number));
请注意,整数中字节的顺序取决于计算机的字节顺序。在小端系统上,“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);
或者如果您使用的是框架 3.5:
int number =
BitConverter.ToInt32(Encoding.ASCII.GetBytes(original).Reverse().ToArray() , 0);
string decoded =
Encoding.ASCII.GetString(BitConverter.GetBytes(number).Reverse().ToArray());
关于c# - 在 C# 中使用 int 作为字符串的数字表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825460/