在perl中,只有整數和雙精度的數組,如 @array = qw/4 3.1416 6.7 15 4.3 /, 如何打包列表轉換成二進制序列並保存到一個.bi文件中,其中二進制文件在元素爲整數時必須完全是int,在元素爲雙精度時必須爲double。這種格式非常重要,因爲我需要將它提供給外部可執行文件。混合整數和雙精度類型並將它們打包爲原始二進制格式,並用perl
-1
A
回答
4
for (@array) {
if (int($_) == $_) {
$output .= pack($int_format, $_);
} else {
$output .= pack($double_format, $_);
}
}
也就是說,你指定的文件格式不能被任何東西讀取。讀者需要知道下一個要讀取的內容是以整數還是雙精度來存儲,但該信息不可用。
也許你的意思是你想要根據@array
的字符串中是否存在.
來選擇格式。在這種情況下,你會使用以下命令:
for (@array) {
if (/\./) {
$output .= pack($double_format, $_);
} else {
$output .= pack($int_format, $_);
}
}
你所提到的,因爲讀者希望浮點數和整數的特定模式。那麼爲什麼不使用相同的模式呢?
$output .= pack("$int_format$double_format$double_format$int_format$double_format", @array);
注意,我離開的確切格式含糊。那是因爲你做得很好。
- 沒有指定該整數的大小:
- 8位整數(
c
) - 16位整數(
s
) - 32位整數(
l
) - 64位整數(
q
或使用Math::Int64) - 與
int
相同mpiler已編譯的Perl(i
) - 同Perl使用(
j
)
- 8位整數(
- 爲雙精度浮點數格式爲
d
。 - 沒有指定字節序(對於整數和浮點數):
- 小端(追加
<
) - 大端(追加
>
) - 本地字節順序(沒有後綴)
- 小端(追加
相關問題
- 1. Android雙精度十進制格式
- 2. 將雙精度轉換爲十進制格式?
- 3. 爲什麼C++允許將std :: initializer_list強制轉換爲原始類型,並用於初始化它們?
- 4. 合併二進制數據
- 5. 如何使用C和GMP_Bignum將二進制原始數據轉換爲整數
- 6. 調整並優化圖像並將它們加載到CDN中,並將它們從原始CDN與原始圖像大小進行正常鏈接
- 7. 將雙精度值轉換爲二進制值
- 8. 將二進制雙精度數字的十六進制表示轉換回Ruby中的雙精度
- 9. 在C++中使用整數和雙精度的格式矩陣
- 10. 將包含二進制值的矢量轉換爲matlab中的雙精度?
- 11. 整型爲原始類型
- 12. PDF格式的NSImages並將它們合併到Swift中
- 13. 接收rtp數據包並將它們寫入二進制文件
- 14. 新的類型由十進制和雙精度組成
- 15. 控制C++單精度和雙精度混合計算的規則是什麼?
- 16. 雙精度混淆?
- 17. 以perl格式打印和保存二進制格式的數據
- 18. 如何在數組中接受並輸出雙精度和雙精度數?
- 19. 使用高斯混合模型進行二進制分類
- 20. 多個二進制分類器合併
- 21. 將十進制轉換爲二進制並以MIPS打印
- 22. 合併和求和值並將它們放入數組
- 23. 是否有可能以保真度將浮點雙精度浮點雙精度到兩個十進制整數?
- 24. 從Python/NumPy中包含整數和雙精度的二進制文件讀取或構建數組
- 25. 作爲兩個雙打總和的雙雙精度浮點數
- 26. C#十進制和雙精度
- 27. _winreg.QueryValueEx返回「混合型」二進制值
- 28. 將整數格式化爲八進制
- 29. 將整數(長整數)轉換爲jsp中的雙精度值
- 30. 混合兩個流並使用FMS4將它們保存到FLV
不要使用類似JSON的可解析格式。 – Sobrique