将 C# double 转换为 Delphi Real48

2023-12-13

我发现了以下问题将 Delphi Real48 转换为 C# double但我想走另一条路,从 C# 到 Delphi。

有谁知道如何做到这一点?我尝试过对代码进行逆向工程,但运气不佳。

Update:

我正在寻找 C# 代码,该代码将采用 double 并将其转换为 Real48(大小为 6 的 byte[])。

Thanks


我遇到这个线程寻找相同的代码。这是我最终写的:

public static byte [] Double2Real48(double d)
{
    byte [] r48 = new byte[6];
    byte [] da = BitConverter.GetBytes(d);

    for (int i = 0; i < r48.Length; i++)
        r48[i] = 0;

    //Copy the negative flag
    r48[5] |= (byte)(da[7] & 0x80);

    //Get the expoent
    byte b1 = (byte)(da[7] & 0x7f);
    ushort n = (ushort)(b1 << 4);
    byte b2 = (byte)(da[6] & 0xf0);
    b2 >>= 4;
    n |= b2;

    if (n == 0)
        return r48;

    byte ex = (byte)(n - 1023);
    r48[0] = (byte)(ex + 129);

    //Copy the Mantissa
    r48[5] |= (byte)((da[6] & 0x0f) << 3);//Get the last four bits
    r48[5] |= (byte)((da[5] & 0xe0) >> 5);//Get the first three bits

    r48[4]  = (byte)((da[5] & 0x1f) << 3);//Get the last 5 bits
    r48[4] |= (byte)((da[4] & 0xe0) >> 5);//Get the first three bits

    r48[3]  = (byte)((da[4] & 0x1f) << 3);//Get the last 5 bits
    r48[3] |= (byte)((da[3] & 0xe0) >> 5);//Get the first three bits

    r48[2]  = (byte)((da[3] & 0x1f) << 3);//Get the last 5 bits
    r48[2] |= (byte)((da[2] & 0xe0) >> 5);//Get the first three bits

    r48[1]  = (byte)((da[2] & 0x1f) << 3);//Get the last 5 bits
    r48[1] |= (byte)((da[1] & 0xe0) >> 5);//Get the first three bits

    return r48;

}

Real48 与 IEEE 754 类似,尾数相同。为了使尾数位于正确的位置,必须进行位移位。

Real48 指数的偏差为 129,双精度数的偏差为 1023。

负标志存储在最后一个字节的第一位。

Notes:我认为这段代码不适用于大端机器。它不检查 NAN 或 INF。

以下是将 real48 转换为 double 的代码。它是从 Free Pascal 编译器移植的:

static double real2double(byte [] r)
{
    byte [] res = new byte[8];
    int exponent;

    //Return zero if the exponent is zero        
    if (r[0] == 0)
        return (double)0;

    //Copy Mantissa
    res[0] = 0;
    res[1] = (byte)(r[1] << 5);
    res[2] = (byte)((r[1] >> 3) | (r[2] << 5));
    res[3] = (byte)((r[2] >> 3) | (r[3] << 5));
    res[4] = (byte)((r[3] >> 3) | (r[4] << 5));
    res[5] = (byte)((r[4] >> 3) | ((r[5] & 0x7f) << 5));
    res[6] = (byte)((r[5] & 0x7f) >> 3);

    //Copy exponent
    //correct exponent
    exponent = (r[0] + (1023-129));
    res[6] = (byte)(res[6] | ((exponent & 0xf) << 4));
    res[7] = (byte)(exponent >> 4);

    //Set Sign
    res[7] = (byte)(res[7] | (r[5] & 0x80));
    return BitConverter.ToDouble(res, 0);  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 C# double 转换为 Delphi Real48 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 使用与 faker 集成的 Factory Boy 从名称列表中进行选择

    我正在尝试使用factory faker从四家公司的列表中随机选择 并将它们用作生成名称列表的流量源 我正在使用下面的代码 from django db import models import factory import factory
  • Bouncy castle没有这样的方法错误

    我正在尝试使用 Bouncy Castle v1 53 PGP 和使用 PGPUtil 类解密文件 该程序在我的 Eclipse 中运行良好 但在集成到 war 文件中并部署到 weblogic 服务器上时出现以下错误 我正在使用以下依赖项
  • Asp.net Core TempData 生命周期和搜索词

    在我的索引中 我添加了一个搜索字段 当用户输入搜索词并单击过滤器时 索引 Index 将被过滤 到目前为止 一切都很好 我想要实现的是 如果用户在同一控制器中执行其他操作 编辑 详细信息 删除等 并返回到索引 我希望恢复搜索 为此 我使用了
  • 将可变产品的“描述”字段内容添加到 woocommerce“已完成订单”电子邮件

    我正在销售多种产品 每种产品都有 2 个变体 每个变体都需要在已完成的电子邮件中包含一段自定义文本 嵌入 URL Lots自定义电子邮件数量 每个产品and变化 我发现了很多fun ctions php 选项 但它们都是很多年前的版本 非常
  • 使用 jaxb 将 java 对象转换为 xml,反之亦然(marshal 和 unmarshal)

    我应该有一个名为save 它应该将右侧面板中的计算机部件列表编组为 XML 文件 相反 另一种方法称为load 这应该将保存的 XML 文件解组回对象 所以基本上 保存 事件将调用save 方法并将右侧面板中的零件列表保存到 XML 文件
  • 打印n叉树python的所有路径

    我想在python中打印N叉树中从根到叶节点的所有路径 我有一个想法将其打印在二叉树中 但是在 N 进制中执行此操作不会给我正确的结果 我在这里弹出并访问子节点列表中的每个节点 但不确定如何单独打印每个叶节点的路径 class create
  • Rails 5 - 保存回滚,因为嵌套模型父模型未在子模型之前保存

    好吧 伙计们 Rails 5 确实与 Rails 4 有细微差别 我遇到的情况是 每次我单击表单上的提交按钮时 它都会重新加载并显示错误配置文件用户必须存在 and 个人资料用户不能为空 该表单加载良好 包括嵌套模型表单 但由于某种原因 在
  • java.lang.NumberFormatException:对于输入字符串:“22”

    public void loadFromFile String filename File file new File filename BufferedReader br try br new BufferedReader new Fil
  • ArrayList:大小如何增加?

    我有一个关于Java的基本问题ArrayList When ArrayList使用默认构造函数声明并初始化 创建 10 个元素的内存空间 现在 当我添加第 11 个元素时 会发生什么 是否会创建具有 20 个 或更多 元素容量的新内存空间
  • C 函数指针

    static void increment long long n n struct test void work fn long long struct test t1 t1 work fn increment 我现在如何实际调用该函数
  • Spring boot mongodb审计错误

    我正在尝试在 Spring Boot 应用程序中配置 mongodb 审核 并且在尝试保留域类时遇到此错误 java lang IllegalArgumentException Couldn t find PersistentEntity
  • F# 不可变的可变大小窗口数据结构

    下面是我需要的数据结构的描述 我想使用不可变的数据结构来实现它 我试图确定 是否有一个现有的数据结构可以支持我在这里尝试做的事情 或者我是否需要创建一个数据结构 如果我需要创建它 什么是好的从哪里开始 构建块 我有稳定的某种类型的传入值流
  • 如何将逻辑符号转换为 Haskell 语法

    我最近在大学学习了 Haskell 我正在做一组练习 下面是我无法理解的一个片段 考虑以下简单的前缀计算器语言的语法 num 0 1 2 3 4 5 6 7 8 9 int num num int expr int expr expr ex
  • 有条件渲染的输入组件不更新值

    使用 jsf 2 和 Primefaces 3 4 我知道有很多类似的问题 但没有一个能解决这个问题 当 panelGrid 内部 用 a 渲染时 true 的固定值
  • 如何使用 numpy 和 portaudio 提取低音、中高音

    如本例所示如何从输入音频流中提取频率信息 使用 PortAudio 我对 portaudio 和 numpy 很好奇 我对 fft 不是 100 确定 如何向 numpy 传递一个块并返回从 1 0 到 1 0 的低音 中音和高音的三个值
  • 如何使用多个LIKE运算符并使用索引

    在我的查询中 我想找到与许多 LIKE 运算符之一匹配的行 我知道 3 种方法 但只有其中一种可以使用索引 让我们从表格开始 CREATE TABLE dir id BIGSERIAL PRIMARY KEY path TEXT NOT N
  • 从 django 连接到多个 mongodb 实例

    我将 mongoengine 与 Django 结合使用 在我的项目中需要连接到两个 MongoDB 实例 同时处理单个请求 如果我使用它 效果很好 connect mdb1 do stuff with mdb1 connect mdb2
  • 如何过滤 CakePHP 中的深层关联

    我有以下表格 活页夹 文档 用户 docs users Doc 属于 Binder Doc hasAndBelongsToMany User 我想获取当前登录用户的活页夹及其关联文档 docs users 表中的关联 user id 我尝试
  • 无需 for 循环即可高效执行一维线性插值

    我正在尝试使用特定精度在 MATLAB 中执行线性插值 我想知道是否有一种有效的方法在 MATLAB 中编写线性插值函数 使其不需要 for 循环并且运行速度非常快 我想将传入的数据修改为特定的位宽 使用 quantize 函数 然后我还想
  • 将 C# double 转换为 Delphi Real48

    我发现了以下问题将 Delphi Real48 转换为 C double但我想走另一条路 从 C 到 Delphi 有谁知道如何做到这一点 我尝试过对代码进行逆向工程 但运气不佳 Update 我正在寻找 C 代码 该代码将采用 doubl