使用cygwin下的纯awk将十六进制字符串转换为二进制文件

使用cygwin下的纯awk将十六进制字符串转换为二进制文件,awk,cygwin,hex,hexdump,Awk,Cygwin,Hex,Hexdump,尝试使用cygwin(在linux中运行时有效)将格式为31ff097112的普通awk格式的字符串转换为二进制文件。尝试了以下操作: BEGIN { BINMODE=3; ORS=""; s="000102030405060708ff800f0e0d0c0b0a"; # not working on cygwin for values >=0x80: len=length(s); print "">"broken.bin" for(i=1; i<=

尝试使用cygwin(在linux中运行时有效)将格式为
31ff097112
的普通awk格式的字符串转换为二进制文件。尝试了以下操作:

BEGIN {
  BINMODE=3;
  ORS="";
  s="000102030405060708ff800f0e0d0c0b0a";
  # not working on cygwin for values >=0x80:
  len=length(s);
  print "">"broken.bin"
  for(i=1; i<=len; i+=2) {
    printf("%c", strtonum("0x"substr(s, i, 2)))>>"broken.bin";
  }
  #working, but uses external xxd command:
  print s>"/tmp/xxx";
  system ("cat /tmp/xxx|xxd -r -p>good.bin");
  exit;
}
而xxd工具(找到一个提示)做得很好(如预期的那样:-):

因此,我想知道是否有一种解决方案只使用awk的特性就可以使用awk(不,不是perl,不是python,不是C)
注意:我的普通awk解决方案与linux awk perfect配合使用,因此cygwin中可能还需要设置一些其他选项来实现这一点?

很抱歉回答我自己的问题,刚刚找到了解决方案:使用
-b
-字符作为字节调用awk,然后它也可以从cygwin内部工作…

它完全符合常见问题解答。;)
$ hexdump -C broken.bin
00000000  00 01 02 03 04 05 06 07  08 c3 bf c2 80 0f 0e 0d  |................|
00000010  0c 0b 0a                                          |...|
00000013
00000000  00 01 02 03 04 05 06 07  08 ff 80 0f 0e 0d 0c 0b  |................|
00000010  0a                                                |.|