gpt4 book ai didi

c# - 将浮点值转换为 24 位

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:46 25 4
gpt4 key购买 nike

我有一个浮点值 128.523,需要表示为 24 位 2s 补码数。

第 23 位是符号位。第 22 位到第 15 位是整数部分。第 14 到 0 位是 float 部分。

我需要将此数据发送到只接受此格式数据的协议(protocol)。

我明白我需要提供我的代码并询问答案,但不幸的是我完全迷失了如何继续前进。

如有任何帮助,我们将不胜感激。

在社区的帮助下更新

  • 我将从外部设备获取跟踪数据并将其发送到使用 freeD 协议(protocol)的应用程序。我有

  • 问题是没有 24 位 float ,我发现如果我们将其设为 24 位(用户类),这些位将如何排列。

  • 我会通过UDP发送

  • 我不知道比特需要以什么顺序发送

更新

它是双源

最佳答案

基于其他response我告诉过你,唯一的问题就是将 Int32 截断为 Int24。最简单的方法是使用返回 byte[4]BitConverter.GetBytes(int) 然后删除最后一个 byte.. . 或者我们可以使用一些特殊的 struct,比如:

[StructLayout(LayoutKind.Explicit)]
struct Int32ToBytes
{
[FieldOffset(0)]
public int Int32;

[FieldOffset(0)]
public uint Uint32;

[FieldOffset(0)]
public byte Byte0;

[FieldOffset(1)]
public byte Byte1;

[FieldOffset(2)]
public byte Byte2;

[FieldOffset(3)]
public byte Byte3;
}

public struct Int24
{
public byte Byte0;
public byte Byte1;
public byte Byte2;
}

然后:

private const int minSrc = 0x5A0000;
private const int maxSrc = 0xA60000;
private const double minDest = -180.0;
private const double maxDest = 180.0;
private const double rangeDest = maxDest - minDest;

public static Int24 ConvertToInt24(double num)
{
int res = (int)(((num - minDest) * rangeSrc / rangeDest) + minSrc);
var conv = new Int32ToBytes { Int32 = res };
var res2 = new Int24
{
Byte0 = conv.Byte0,
Byte1 = conv.Byte1,
Byte2 = conv.Byte2,
};
return res2;
}

现在,Int24 结构有 3 个字节,Byte0Byte1Byte2

关于c# - 将浮点值转换为 24 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com