我正在开发一个程序,它将真正旧的 Open Access 4 .df 文件转换为其他格式,并创建数据库脚本 - 我已经能够转换除十进制类型之外的所有可能的类型。我发现字节顺序必须是 80 位扩展精度。我已经尝试自己进行转换,但无法将 80 位扩展精度(https://en.wikipedia.org/wiki/Extended_ precision#x86_Extended_Precision_Format )转换为字符串以及将字符串转换为 80 位扩展精度Java 中的精度。
价值:1,235
来自 df 文件的十六进制:40 00 9e 06 52 14 1e f0 db f6
价值:0,750
来自 df 文件的十六进制:3f ff c0 00 00 00 00 00 00 00
也许有人可以帮助转换?
此致
@EJP评论:好吧,我扔掉了最后16位,所以我得到了 3f ff c0 00 00 00 00 00 关于(Java - Convert hex to IEEE-754 64-bit float - double precision)我尝试将其转换为
String hex = "3fffc00000000000";
long longBits = Long.valueOf(hex ,16).longValue();
double …Run Code Online (Sandbox Code Playgroud) 我试图在Windows中测试TDM-GCC 64位汇编中的附加功能.我在前一段时间搜索了资源,我遇到了类似的代码(我做了一些修改,在TDM-GCC中编译它).
typedef struct
{
int size;
__uint64_t uints[130];
} BigInteger;
void add(BigInteger *X, BigInteger *Y); // X += Y
// %rcx holds address of X, and %rdx holds address of Y apparently.
// calc.s - assembly file
.globl add
add:
movq 8(%rdx), %rax
addq %rax, 8(%rcx)
movq 16(%rdx), %rax
adcq %rax, 16(%rcx)
movq 24(%rdx), %rax
adcq %rax, 24(%rcx)
... ...
Run Code Online (Sandbox Code Playgroud)
第一个汇编代码有效.不利的是,只要计算最大尺寸就需要很小的数字.所以我改为检查X和Y的大小并设置一个大小条件的循环,这样如果X和Y不大,它就不会总是添加整个数组.
...
// %r13 holds X addr, %r14 holds Y addr.
addq $8, %r13 // I have tried incq …Run Code Online (Sandbox Code Playgroud) 假设我想在汇编中将一个大数乘以另一个(可能很小)的数。大数(被乘数)DX:AX保存在BX. 该MUL指令仅对 进行操作AX。那么该怎么办DX呢?
例如,数字是0001:0000H(65536),我想将其乘以 2。
number dw 0000h, 0001h
...
mov ax, [number]
mov dx, [number+2]
mov bx, 2
mul bx ; it is ax*2 or 0000*2
Run Code Online (Sandbox Code Playgroud)
所以结果为零!对此有什么想法吗?
我什至在启动问题的解决方案时遇到问题。我曾尝试考虑乘法是重复加法算法,但无论我考虑什么算法,我似乎都专注于一个问题——8086 中的最大寄存器大小是 16 位。
data segment
num1 dw 0102h,0304h,0506h,0708h
num2 dw 0102h,0304h
res dw ?,?,?,?,?,?
data ends
code segment
assume CS:CODE, DS:DATA
start:
mov ax,DATA
mov DS,ax
Run Code Online (Sandbox Code Playgroud)
.....填写代码.......
在这一点上,我被卡住了。即使是轻微的代码提示或算法也将不胜感激。