将非托管双精度转换为托管字符串,可以通过使用 System.IO.BinaryReader
类加载非托管资源,然后再将其序列化为 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
可读的格式,然后将得到的数据写入字符串实现。以下是可以使用的方法:
通过 MemoryStream
序列化非托管双精度,将其转换成 BinaryReader
可读的格式,然后读取字符串实现。
class Program
{
static void Main(string[] args)
{
double number = -100.123456789012345678;
// 将非托管双精度转换为托管字符串
string str = BinaryReader.GetStringFromStream<double>(new MemoryStream(BitConverter.GetBytes(number)));
Console.WriteLine(str);
}
}
在上面的代码中,我们使用了 MemoryStream
将双精度值进行序列化。因为 MemoryStream
不支持 BitConverter.GetBytes
方法需要的字节类型 (sbyte*
),所以我们使用了 BitConverter.GetBytes
方法对内存流中的数据进行转换,将一个 double
值转换为 sbyte*
类型的字节指针。然后我们使用 BinaryReader.GetStringFromStream
方法将序列化后的数据转化为字符串,并将返回的字符串进行输出。
通过 C# 自带的 double
类型的序列化反序列化和 StringBuilder
类来实现。
class Program
{
static void Main(string[] args)
{
double number = -100.123456789012345678;
// 反序列化非托管双精度
unsafe {
byte[] bytes = BitConverter.GetBytes(number);
char* charsPointer = stackalloc char[](bytes.Length) ;
char* bytesPrt = (char*)bytesPointer ;
for (int i = 0; i< bytes.Length; i++) {
bytesPrt [i] = chars[bytes[i]];
}
double ans = CharConverter.StringToDoubleUsingStringBuilder(charsPointer);
Console.WriteLine(ans);
}
领取专属 10元无门槛券
手把手带您无忧上云