c# - 在 C# 中使用 int 作为字符串的数字表示

标签 c# string int

我尝试使用整数作为字符串的数字表示形式,例如,将“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/

相关文章:

c# - 在 Visual Studio 2010 中调试 C++ 项目

c# - 检查字典键包含

c++ - 如何将0x0000之类的字符串转换为int

c# - LIKE 的 SQL 语法帮助

java - 这里会创建多少个 String 对象?

c++ - 为什么我的字符串没有被打印出来?

Javascript 添加字符串开始

java - 从 BigInteger 转换为 int 是否明智?

C# - Int 操作莫名其妙地返回负值

c# - 在 Startup.cs 中加载程序集 .net core 2.1