首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UINT64编码为浮动

将UINT64编码为浮动
EN

Stack Overflow用户
提问于 2019-09-13 11:31:41
回答 2查看 126关注 0票数 2

我在C#中有将UInt64转换为float的代码,输入的值例如是'4537294320117481472‘。完成工作的代码位于第一个块中,第二个块显示相关函数,答案位于底部。

代码语言:javascript
复制
byte[] rawParameterData = new byte[8];

Console.Write("Enter Value:  ");
string rawDataString = Console.ReadLine();
UInt64 rawParameterInteger = UInt64.Parse(rawDataString);

rawParameterData = ConvertFromUInt64(rawParameterInteger);

float convertedParameterData = ConvertToFloat(rawParameterData, 0);

rawParameterData现在等于字节数组62,247,181,37,0,0,0,0,0,0

convertedParameterData现在等于0.4838039

代码语言:javascript
复制
public static byte[] ConvertFromUInt64(UInt64 data)
{
    var databuf = BitConverter.GetBytes(data);
    return SwapBytes(databuf, 8);   // DIS is big-endian; need to convert to little-endian: least significant byte is at lower byte location.
}

static float ConvertToFloat(byte[] data, int offset)
{
    var databuf = CopyData(data, offset, 4);
    return BitConverter.ToSingle(databuf, 0);
}


static byte[] SwapBytes(byte[] srcbuf, int datalength)
{
    var destbuf = new byte[srcbuf.Length];
    for (var i = 0; i < datalength; i++)
        destbuf[datalength - 1 - i] = srcbuf[i];
    return destbuf;
}

代码似乎依赖于BitConverter.ToSingle(databuf, 0)函数,该函数是C#的一部分。

这能用Python完成吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 11:55:55

在python中,这是非常简单的

代码语言:javascript
复制
import struct

a = 4537294320117481472

b = struct.pack('Q', a)
f = struct.unpack('ff', b)

print(f)  # (0.0, 0.4838038980960846)

https://docs.python.org/3/library/struct.html

票数 3
EN

Stack Overflow用户

发布于 2019-09-13 12:02:50

代码语言:javascript
复制
import struct
import math 

# We only care about the first 4 of eight of the digits so we 
# need to shift by the character size * number of characters
# then we will just have databuf in our significantBits variable
# So we are converting from: 3E F7 B5 25 0 0 0 0 to 3E F7 B5 25
characterWidth = 8
significantBits = 4537294320117481472 >> (characterWidth * 4)

# We can use this python function convert from bits to a float
# Taken from https://stackoverflow.com/a/14431225/825093 
def bitsToFloat(b):
    s = struct.pack('>l', b)
    return struct.unpack('>f', s)[0]

float = bitsToFloat(significantBits)
print(float) # 0.483803898096
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57922866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档