C#之double网络字节序

我现在需要发送一个double数据,通过socket发送,但是是网络字节序,但是C#并没有提供相关的api,这里,我想到一个思路,

由于long 也是8个字节,所以,我先把double转成内存一样的long数据,再转成网络字节序的long 最后,再转成内存一样大的double,

实例如下:

        static Double DoubleHostToNetworkOrder(Double host)
        {
            var bd = BitConverter.GetBytes(host);
            long ld = BitConverter.ToInt64(bd, 0);
            var netLd = IPAddress.HostToNetworkOrder(ld);
            var netbd = BitConverter.GetBytes(netLd);
            return BitConverter.ToDouble(netbd, 0);
        }

看内存情况,double的本机内存情况

 double的网络字节序内存情况

 两者的顺序发生了颠倒。

所以返回的值应该是正确的。

再写一个把网络字节序的double转成本机字节序的例子:

        static Double DoubleNetworkToHostOrder(Double network)
        {
            var bd = BitConverter.GetBytes(network);
            long ld = BitConverter.ToInt64(bd, 0);
            var HostLd = IPAddress.NetworkToHostOrder(ld);
            var Hostbd = BitConverter.GetBytes(HostLd);
            return BitConverter.ToDouble(Hostbd, 0);
        }

结果输出如下:

 我们可以发现,结果是正确的。

******************************总结****************************

C#没有提供double的网络字节序转换方法,但是我们可以通过long的网络字节序转换方法,来变通的实现double的网络字节序的转换方法。这里记住一点,内存是不会骗人的,其实的该怎么转换就怎么转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值