perl - 如何在perl中将字节数组转换为int64
问题描述
我有一个要在 Perl 5 中解决的特定问题(使用最少的外部依赖项,如果可能与 5.12 版兼容),与解码这样的字节数组有关:
my @data = (0x00, 0x00, 0x00, 0x03, 0x84, 0x14, 0x40, 0x32);
我想提取这样的数字:15100821554
我尝试了几种打包/解包的变体,但没有成功
say(unpack("Q", pack("C*", @data)));
打印 3620916657624449024
go中的等效代码是这样的
data := []byte{0x00, 0x00, 0x00, 0x03, 0x84, 0x14, 0x40, 0x32}
deciseconds := int64(binary.BigEndian.Uint64(data))
可以在这里执行:https: //play.golang.org/p/I2J45H-sn-H
有任何想法吗?
解决方案
你快到了,以下工作:
say unpack 'Q', pack 'C*', reverse @data;
# ~~~~~~~
这意味着您需要相反的字节顺序,这意味着以下列方式打包:
unpack 'Q>', pack 'C*', @data;
# ^
推荐阅读
- python - 无法运行仪表测试 - connectex:无法建立连接,因为目标机器主动拒绝它
- java - 如何在 Thymeleaf 中打印警告文件缺失消息?
- c# - ICollection.ToList().Insert 不插入值
- python - 解析 PDF 文件 - 我需要转义字符作为分隔符
- java - 尝试在 datastage 11.7 中写入 parquet 文件时出错(File_Connector_20,0:java.lang.NoClassDefFoundError:org.apache.hadoop.fs.FileSystem)
- smalltalk - Smalltalk 中定义的类变量在哪里?
- c# - 在 BeforeFeature 方法中初始化 webdriver
- assembly - 汇编编程中重新定义错误汇编
- c# - Razor Pages Core 3.1 中的购物车实现更新项目计数标签
- azure - Azure 逻辑应用 - 以 JSON 形式返回电子邮件内容