如果系统不支持 64 位运算,如何将 8 字节的数组转换为 32 位数字
How to convert an array of 8 bytes into a 32-bit number, if the system does not support 64-bit arithmetic
我有一个 8 字节的数组,代表一些巨大的数字,例如
11017125042 十进制 - 作为字节,它看起来像 00 00 00 02 90 AB FC B2。
我想将 8 个字节转换为 32 位有符号整数,去掉最后 4 位数字。
如果您想知道,这是一个位置值,其中一圈是 10 亿个单位,所以该值表示 11.017125042 圈。我不需要这么荒谬的分辨率,所以我想得到初始值除以 10 000 - 1101712 而不是 11017125042.
棘手的部分是系统(西门子PLC)不支持64位算法。
知道怎么做吗?
感谢任何建议。
在LAD/FBD块的SCL块或SCL网络中进行。
#posLrealDiv10k :=
+ #posBytes[7] * 0.0001 //remove if you don't care
+ #posBytes[6] * 0.0256 //remove if you don't care
+ #posBytes[5] * 6.5536 //...
+ #posBytes[4] * 1677.7216
+ #posBytes[3] * 429496.7296
+ #posBytes[2] * 109951162.7776
+ #posBytes[1] * 28147497671.0656
+ #posBytes[0] * 7205759403792.7936;
SIOS 论坛通常对这类转换问题很有帮助。似乎不是这个特别的。
我有一个 8 字节的数组,代表一些巨大的数字,例如 11017125042 十进制 - 作为字节,它看起来像 00 00 00 02 90 AB FC B2。
我想将 8 个字节转换为 32 位有符号整数,去掉最后 4 位数字。
如果您想知道,这是一个位置值,其中一圈是 10 亿个单位,所以该值表示 11.017125042 圈。我不需要这么荒谬的分辨率,所以我想得到初始值除以 10 000 - 1101712 而不是 11017125042.
棘手的部分是系统(西门子PLC)不支持64位算法。 知道怎么做吗?
感谢任何建议。
在LAD/FBD块的SCL块或SCL网络中进行。
#posLrealDiv10k :=
+ #posBytes[7] * 0.0001 //remove if you don't care
+ #posBytes[6] * 0.0256 //remove if you don't care
+ #posBytes[5] * 6.5536 //...
+ #posBytes[4] * 1677.7216
+ #posBytes[3] * 429496.7296
+ #posBytes[2] * 109951162.7776
+ #posBytes[1] * 28147497671.0656
+ #posBytes[0] * 7205759403792.7936;
SIOS 论坛通常对这类转换问题很有帮助。似乎不是这个特别的。