2012-05-31 64 views
2

我正在使用縮小版本的CentOS 5.5,但沒有提供許多工具。沒有xxd,bc或hd。不幸的是,我無法安裝任何額外的工具。我確實有od,dd,awk和bourne shell(而不是bash)。我想要做的是在正常環境中相對簡單。基本上,我有一個數字,比如100,000,我需要將它的二進制表示存儲在一個文件中。通常情況下,我會做這樣的事情......xxd -r without xxd

printf '%x' "100000" | xxd -r -p > file.bin 

如果您查看文件的十六進制轉儲,你會看到正確表示爲186A0的數量。

是否有相當於我可以用我有限的工具拼湊在一起?幾乎所有我嘗試存儲數字的ascii值。

回答

2

您可以使用printf,awk和shell的組合來實現。

#!/usr/bin/env awk 
# ascii_to_bin.awk 
{ 
    # Pad out the incoming integer to a full byte 
    len = length($0); 
    if ((len % 2) != 0) { 
     str = sprintf("0%s", $0); 
     len = len + 1; 
    } 
    else { 
     str = $0; 
    } 
    # Create your escaped echo string 
    printf("echo -n -e \""); 
    for(i=1;i<=len;i=i+2) { 
     printf("\\\\x%s", substr(str, i, 2)); 
    } 
    printf("\""); 
} 

然後,你可以做

$ printf '%x' "100000" | awk -f ascii_to_bin.awk | /bin/sh > output.bin 

如果你知道你可以做你的目標二進制文件長度的printf "%0nX"n是目標的大小),然後卸下(len % 2)邏輯。

+0

謝謝,弗蘭克。非常感激。 – Allen