2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« バイナリファイルを16進数でダンプする。 | トップページ | 文字列中の異文字を16進表示する関数(VBScript) »

2008年9月25日 (木)

バイナリファイルを16進数でダンプする。(その2)

Byte配列を使わないようにして、JScriptにして、バッチファイルにラップすると、

HexDump.CMD ファイル

@if(0)==(0) ECHO OFF
CScript.exe //NoLogo //E:JScript "%~f0" %*
GOTO :EOF
@end
var adTypeBinary=1;
var adTypeText=2;
var bStream=new ActiveXObject("ADODB.Stream");
bStream.Open();
bStream.Type=adTypeBinary;
bStream.LoadFromFile(WScript.Arguments.Item(0));
var tStream=new ActiveXObject("ADODB.Stream");
tStream.Open();
tStream.Type=adTypeText;
tStream.WriteText(String.fromCharCode(0));
tStream.Position=0;
tStream.Type=adTypeBinary;
tStream.Position=2;
var z=tStream.Read(1);
tStream.Position=2;
for(var Pos=0;Pos<bStream.Size;Pos++){
  bStream.CopyTo(tStream,1);
  tStream.Write(z);
}
tStream.Position=0;
tStream.Type=2;
for(var Pos=0;Pos*2+2<tStream.Size;Pos+=16){
  WScript.StdOut.Write(Pos.toString(16));
  var Bytes=tStream.ReadText(16);
  var Chars="";
  for(var k=0;k<16;k++){
    if(k%4==0) WScript.StdOut.Write(" ");
    if(k<Bytes.length){
      var h=Bytes.charCodeAt(k).toString(16);
      if(h.length<2) WScript.StdOut.Write("0");
      WScript.StdOut.Write(h);
      var h=Bytes.charCodeAt(k);
      if(h<32) h=32;
      Chars+=String.fromCharCode(h);
    }else{
      WScript.StdOut.Write("  ");
    }
  }
  WScript.StdOut.WriteLine(" " + Chars);
}

« バイナリファイルを16進数でダンプする。 | トップページ | 文字列中の異文字を16進表示する関数(VBScript) »