我的变量包含一些文本,但当前存储为 int(使用的类读取内存地址处的字节并转换为 int。Variable.ToString 仅显示十进制表示,但不将其编码为可读文本,或换句话说,我现在想使用 ascii 编码或其他方式将数据从 int 转换为字符串。
5 回答
假设一个 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);
}
这是一个演示(基于我们上面的 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 语句,这是必需的托管字符串/数组等不保证静态放置在内存中 - 这可以确保它在该部分期间。
Int32.ToString()有一个采用格式字符串的重载。查看可用的格式字符串并使用其中之一。
好的。如果您的变量是一个指针,那么 Tim 将您指向正确的方向(假设它是一个地址而不是地址的偏移量 - 在这种情况下,您将需要起始地址来偏移)。
另一方面,如果您的变量包含四个编码的 ascii 字符(每个字节),那么您需要拆分为字节并将每个字节转换为一个字符。像这样的东西Console.WriteLine(TypeDescriptor.GetConverter(myUint).ConvertTo(myUint, typeof(string)));
从这里 - MSDN ByteConverter
从您之前的问题来看,您拥有的 int (可能)是指向字符串的指针。根据指针处的数据是字符还是字节,执行以下操作之一来获取您的字符串:
var s = new string((char*)myInt);
var s = new string((sbyte*)myInt);