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

时间:2010-05-13 08:56:08

标签: 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) });

有更清洁的方法吗?我已经尝试了各种演员表,但正如预期的那样,编译器抱怨它。

5 个答案:

答案 0 :(得分:3)

字符是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());

答案 1 :(得分:3)

int value = 0x41424344;
string s = Encoding.ASCII.GetString(
               BitConverter.GetBytes(value).Reverse().ToArray());

(上面假设你是在一个小端系统上运行。对于big-endian你可以放弃.Reverse().ToArray()部分,虽然你是在一个小端系统然后它可能会更有意义的是,如果可能的话,首先将“ABCD”存储为0x44434241。)

答案 2 :(得分:0)

public string ConvertToHex(string asciiString)
{
    string hex = "";
    foreach (char c in asciiString)
    {
        int tmp = c;
        hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
    }
    return hex;
} 

它会根据您的要求将字符串转换为十六进制。

答案 3 :(得分:0)

public static string ToHexString(string value)
{
    return value.Aggregate(new StringBuilder("0x"),
        (sb, c) => sb.AppendFormat("{0:x2}", (int)c)).ToString();
}

答案 4 :(得分:0)

如果字符串永远不超过8个字符和一种Hexstring,你可以使用 基本变量16查看Convert类的转换函数。

string s = "ABCD";
uint i = Convert.ToUInt32( s, 16 );
MessageBox.Show( Convert.ToString( i, 16 ) );

问候 糟糕