【问题标题】:Outputting a decimal value as two little-endian hex bytes to a file将十进制值作为两个小端十六进制字节输出到文件
【发布时间】:2019-09-19 16:59:49
【问题描述】:

我需要一个执行以下操作的 bash 命令:

编写一个新文件,其中前两个字节包含一个值(在本例中为起始地址)的原始十六进制字节(不是 ASCII)。即,49152 应作为00 c0 写入文件。

我尝试了printfxxdfoldtac/cat 等的几种组合。

printf "%X\\n" 49152 | fold -w2|tac|tr -d "\n" 

这为我提供了我需要的 ASCII 表示,而不是原始 HEX 字节。

【问题讨论】:

  • 这是关于创建一个以后面代码的起始地址开头的二进制文件。所以 $C000 将是前 2 个字节之后的程序的起始地址。
  • hexdump 只对文件有效,应该在命令行中使用
  • 你试过这个吗:{ dd if=/dev/zero bs=1 count=1 2>/dev/null; printf $'\xc0'; } >yourfile.bin ?
  • 问题是,$c000 (49152) 是一个变量,而不是一个固定值。
  • printf, xxd, tac, foldtr 不是bash,所以如果它们没问题,大概PerlPython 也是这样恕我直言,会是更好(不那么笨拙)的选择。

标签: linux bash data-conversion


【解决方案1】:
value=49152
printf "\x$(printf %x $(($value-$value/256*256)))\x$(printf %x $(($value/256)))" > file.txt

hexdump -C file.txt 

输出:

00000000 00 c0 |..| 00000002

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2015-08-08
    • 2018-07-26
    • 2013-09-12
    • 1970-01-01
    • 2017-09-13
    • 2013-05-13
    相关资源
    最近更新 更多