首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将非托管双精度转换为托管字符串?

将非托管双精度转换为托管字符串,可以通过使用 System.IO.BinaryReader 类加载非托管资源,然后再将其序列化为 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 可读的格式,然后将得到的数据写入字符串实现。以下是可以使用的方法:

方法一

通过 MemoryStream 序列化非托管双精度,将其转换成 BinaryReader 可读的格式,然后读取字符串实现。

代码语言:txt
复制
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 类来实现。

代码语言:txt
复制
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);
        }
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券