-1

我的变量包含一些文本,但当前存储为 int(使用的类读取内存地址处的字节并转换为 int。Variable.ToString 仅显示十进制表示,但不将其编码为可读文本,或换句话说,我现在想使用 ascii 编码或其他方式将数据从 int 转换为字符串。

4

5 回答 5

1

假设一个 int 变量

    int x=10;

您可以将其转换为字符串

    string strX = x.ToString();

尝试这个

    string s = "9quali52ty3";
    byte[] ASCIIValues = Encoding.ASCII.GetBytes(s);
    foreach(byte b in ASCIIValues) {
    Console.WriteLine(b);
    }
于 2012-06-16T19:06:34.910 回答
1

这是一个演示(基于我们上面的 Q+A)。

注意:设置一个带有空终止符的字符串作为测试,然后将其编码为 ASCII 字节,然后使用 unsafe(您需要在项目属性的 Build Option 中允许它),遍历每个字节并转换它直到 0x0 到达。

private void button1_Click(object sender, EventArgs e)
        {
            var ok = "OK" + (char)0;
            var ascii = Encoding.ASCII;

            var bin = ascii.GetBytes( ok );

            var sb = new StringBuilder();
            unsafe
            {

                fixed (byte* p = bin)
                {
                    byte b = 1;
                    var i = 0;
                    while (b != 0)
                    {
                        b = p[i];

                        if (b != 0) sb.Append( ascii.GetString( new[] {b} ) );
                        i++;
                    }
                }
            }
            Console.WriteLine(sb);
        }

请注意 FIXED 语句,这是必需的托管字符串/数组等不保证静态放置在内存中 - 这可以确保它在该部分期间。

于 2012-06-16T21:09:53.310 回答
0

Int32.ToString()有一个采用格式字符串的重载。查看可用的格式字符串并使用其中之一。

于 2012-06-16T17:34:05.967 回答
0

好的。如果您的变量是一个指针,那么 Tim 将您指向正确的方向(假设它是一个地址而不是地址的偏移量 - 在这种情况下,您将需要起始地址来偏移)。

另一方面,如果您的变量包含四个编码的 ascii 字符(每个字节),那么您需要拆分为字节并将每个字节转换为一个字符。像这样的东西Console.WriteLine(TypeDescriptor.GetConverter(myUint).ConvertTo(myUint, typeof(string)));这里 - MSDN ByteConverter

于 2012-06-16T19:20:44.680 回答
0

从您之前的问题来看,您拥有的 int (可能)是指向字符串的指针。根据指针处的数据是字符还是字节,执行以下操作之一来获取您的字符串:

var s = new string((char*)myInt);
var s = new string((sbyte*)myInt);
于 2012-06-16T17:36:43.330 回答