如何在shell中从二进制文件打印浮点值?

2023-11-26

我有由双浮点(8 字节)或仅浮点(4 字节)值组成的二进制文件,该文件是通过以下方式生成的:

$ python -c $'from struct import pack\nwith open("file.bin", "wb") as f: f.write(pack("<d", 0.123))'
$ xxd file.bin
00000000: b072 6891 ed7c bf3f                      .rh..|.?

我可以通过以下方式从 Python 打印回来:

$ python -c $'from struct import unpack\nwith open("file.bin", "rb") as f: print(unpack("<d", f.read(8)))'
(0.123,)

4字节浮点数也一样,只是改变一下<d into <f(提到为float.bin稍后的)。

如何使用更清晰的方式(不使用 Python)从 shell 脚本打印该值?使用内置工具(例如printf),或广泛使用的外部工具(例如xxd, dc, bc, od, hexdump, etc.).


例如要打印十进制值,我可以使用xxd(Vim 的一部分),例如在重击中:

  • 获取第一个字节的值:

    $ echo $((16#$(xxd -ps -s0 -l1 file.bin)))
    176
    

    For 2nd and forth bytes, increase -s.

  • 从所有 8 个字节中获取十进制值:

    $ echo $((16#$(xxd -ps -s0 -l8 file.bin)))
    -5732404399725297857
    

但是我想打印原始浮动值(0.123) 在 Unix 系列系统上。 理想情况下使用一些单行代码(以使其作为脚本的一部分保持简单),这样我就可以将其分配给文本变量或在屏幕上打印该值。


我尝试过使用printf(在 4 字节浮点数上以使其更简单),但它没有按预期工作:

$ xxd -p float.bin
6de7fb3d
$ printf "%.4f\n" 0x.$(xxd -p float.bin)
0.4293
$ printf "%.4f\n" 0x3dfbe76d
1039918957.0000
$ printf "%.4e\n" 0x3dfbe76d
1.0399e+09

根据这个在线转换器, 0x3dfbe76d是相同的0.123,所以十六进制值是相反的(什么xxd实际上给出)。


这不使用Python是一种广泛使用的外部工具,Perl.

perl -e "print pack('d>',0.123)" > file.bin

perl -e "print unpack('d>',<>)" < file.bin
0.123

或者你可以使用GNUod实用程序,例如:

od -tfD file.bin
0000000                    0.123
0000010

Where -t参数指定浮点数的输出格式(f) 后跟可选的尺寸说明符 (F对于浮动,D对于双或L长双),简而言之-tfD可以替换为-e or -F。要仅打印不带地址的值,-A n可以指定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在shell中从二进制文件打印浮点值? 的相关文章

  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • 如何从 C 函数创建 shell 命令

    想知道如何获取一组 C 函数并将它们转换为 shell bash 命令 假设我有一组简单的 C 函数 int fn1 some C code for function 1 int fn2 some C code for function 2
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • 如何在 Swift 中解析蓝牙设备发送的浮点数?

    在我的 iOS 应用程序上 我需要解码蓝牙接收到的 Float 值 并从不同的设备 不是 iOS 获取 4 个字节 因此我需要一个 便携式 4 字节 Float 格式 目前发件人正在使用以下格式 数据编码 0xCCBBAAAEE 0xEE
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 命令行显示文件的属性?

    我想编写一个显示默认 Windows 属性表的应用程序 我找不到太多关于以正常编程方式执行此操作的信息 所以我想也许可以使用命令行调用 有谁知道 Windows 命令行调用文件的属性 详细信息窗口吗 没有任何运气去寻找它 这个窗口在这里 看
  • 将嵌套循环计算转换为 Numpy 以加速

    我的Python程序的一部分包含以下代码段 其中一个新的网格 是根据旧网格中找到的数据计算的 网格是二维浮点数列表 该代码使用了三个 for 循环 for t in xrange 0 t step for h in xrange 1 hei
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • Windows“findstr”命令:排除包含特定字符串的结果

    到命令findstr str1 我想添加一些内容来排除包含该字符串的结果str2 在Linux中 这样做的方法是添加 grep v str2 to grep str1 当然 是否有一个等效的标志 v在 Windows 中 是否有一个等效的标
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 为什么 C# 处理命令行参数的方式不一致?

    在 C 中 直接从 Main 获取命令行参数会省略 exe 名称 这与 C 的传统相反 通过 Environment GetCommandLineArgs 获取相同的命令行参数包括它 对于这种明显的不一致 我是否缺少一些合理的逻辑原因 cl
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u

随机推荐

  • 在 iOS 上同时录制和播放(Phonegap 版本)

    我正在使用 Phonegap Build 版本 3 3 0 开发 iOS 和 Android 应用程序 应用程序的主要焦点是录音 并在后台播放另一个音频 音乐 对于这两种情况 我都使用phonegap媒体api和正确的音频文件进行录制 iO
  • concatMap f xs 和 concat $map f xs 之间的区别?

    想必他们做的是完全相同的事情concatMap f xs and concat map f xs 我为什么要选择其中之一而不是另一个 我想这可能是一种优化 如果是这样 GHC 7 8 仍然是这种情况吗 情况是这样的concatMap f x
  • Skype API 消息输出

    我如何从 Skype 接收消息并将其输出到我的应用程序 textbox1 Text 我在 skype4com 文档中寻找它 但没有找到任何内容 要监听聊天消息 您可以执行以下操作 First make a reference to skyp
  • JSON,替换引号和斜杠,但是用什么替换呢?

    我有一个忘恩负义的任务 就是在 Java 中手动构建 JSON 字符串 没有任何框架 只有一个 StringBuilder 我知道这很糟糕 但这只是原型的一部分 下次我会做得更好 我的问题 我怎样才能把字符串 gt Some text WI
  • 如何使用node-http-proxy进行HTTP到HTTPS的路由?

    这是我正在使用的模块版本 npm list g grep proxy email protected Web 服务调用我的机器 我的任务是根据请求正文的内容使用附加查询参数将请求代理到不同的 url 和主机 var http require
  • Python 3.5 UnicodeDecodeError 对于 utf-8 格式的文件(语言为“ang”,古英语)

    这是我第一次使用 StackOverflow 提问 但多年来你们集体保存了我的许多项目 让我感觉宾至如归 我正在使用 Python3 5 和 nltk 来解析完整的古英语语料库 该语料库以 77 个文本文件和一个 XML 文档的形式发布给我
  • 检查我的提交在 emacs/git 中是否有“import pdb”?

    我承诺import pdb pdb set trace 经常 有什么方便的方法可以阻止我这样做吗 我使用 emacs git magit 为了完整起见 以下是如何检查索引中版本的内容 构建尤金的回答并进行了一些更改 未作为完整的钩子进行测试
  • Razor 语法在编译前在视图中给出错误(无智能感知)

    我正在浏览 NuGet 包列表 并且正在更新 bootstrap jQuery 等所有内容 但是当我这样做时 我不假思索地更新了微软 欧文和另一个包 可能是 EF 或其他东西 它是一个主要版本更新 哎呀 我不得不通过删除我的项目 从源代码控
  • 如何将默认 MessageConverter 设置为 JSON 并添加 jackson-dataformat-xml?

    我有一个工作的 Spring Boot 应用程序 它使用 JSON 作为交换数据格式 现在我必须添加一个仅以 xml 形式发送数据的服务 我添加了jackson dataformat xml到我的 pom 效果很好 Service publ
  • 在 blueimp 画廊内添加描述

    我正在使用一个蓝小鬼画廊将灯箱添加到我的图片库 因此 当您单击图像缩略图时 它会启动一个带有较大版本图像等的灯箱 我还想在灯箱的每张幻灯片中添加一些描述性文本和一个按钮 但我无法使其正常工作 它不会显示我添加的占位符描述 这是我到目前为止所
  • 获取函数所需的参数数量

    这是一个延伸问题PHP 将 this 传递给类外的函数 我相信这就是我正在寻找的东西 但它是在 python 中而不是 php 中 以编程方式确定函数所需的参数数量 Python 假设我有一个这样的函数 function client fu
  • 仅使用增量、循环、赋值、零的减法运算

    我正在尝试仅使用以下操作来构建减法 加法 除法 乘法和其他运算 incr x 一旦调用此函数 它将把 x 1 赋给 x allocate x y 该函数将把 y 的值赋给 x x y Zero x 该函数将 0 分配给 x x 0 Loop
  • Azure 无法访问存储在应用服务配置中的连接字符串

    我在 Azure 中有一个应用程序服务 作为我正在设计的系统的 API 运行 由于 API 负责直接访问数据库 因此我显然不想在源代码中存储连接字符串 因此将其存储在 Azure 仪表板上应用服务配置中的连接字符串部分中 我的代码几乎是这个
  • PHP - 获取网站的图标并在必要时将其转换为 png

    对于任何给定的站点 example domain tld 或仅仅是 domain tld 我需要在 PHP 中执行以下操作 If the site has a favicon get it wherever it is 如果它还不是 PNG
  • 使用 spring-data-mongodb 持久化包含对象的对象

    下面是一个后续问题问题 13832188 我在用着spring data mongodb版本1 1 1 RELEASE 如果所有成员变量都是原始类型 我就能够持久保存一个对象 即使该对象的名称 PersistenceConstructor通
  • 检测 C# 库中主线程中的运行

    我正在创建一个 C dll 其他开发人员将在 WinForms 中使用它 由于某些原因 我想检测是否从主 GUI 线程调用该库中的方法 并警告开发人员他已经做了这样的事情 即在日志文件中 有没有合理的方法来检测主线程的调用方法 请记住 我无
  • Maven 包含另一个用于插件配置的 pom

    有没有办法在 Maven pom 中包含另一个 pom 或信息 我有几个基本上不相关或有不同父 pom 的 pom 然而 对于打包来说 需要有一个与所有项目相同的清单 所以目前我有一个 pom
  • 比较 PHP 的 __get() 与 Python 中的 __get__() 和 __getattr__()

    有什么区别 get and getattr 在Python中 我来自 PHP 背景 那里只有 get 我什么时候应该使用哪个功能 我已经尝试解决这个问题有一段时间了 我看到很多问题 比如this one 询问之间的区别 getattr an
  • 将线程与 asyncio 结合使用

    我正在寻找一种方法来生成不同的线程 在我的实际程序中 线程数在执行过程中可以改变 来执行无限运行的操作 这会在运行期间阻塞我的整个应用程序 最坏的情况是 几秒钟 因此 我使用标准线程类并且asyncio 因为我的程序的其他部分正在使用它 这
  • 如何在shell中从二进制文件打印浮点值?

    我有由双浮点 8 字节 或仅浮点 4 字节 值组成的二进制文件 该文件是通过以下方式生成的 python c from struct import pack nwith open file bin wb as f f write pack