7

git packfileインデックスからマジックナンバーを取得して、それが実際にパックファイルであることを確認したいと思います。パック形式のドキュメントには、マジックナンバーは「/377tOc」と記載されています。たとえば、Rubyでパックファイルを開くと、ファイルを読み取るときに次のように返されます。

> File.open("pack-4412d2306cfe9a0b6d1b9b4430abc767022e8a3c.idx").read(4)
=> "\377tOc"

しかし、Haskellではこれがわかります:

> h <- openFile "pack-4412d2306cfe9a0b6d1b9b4430abc767022e8a3c.idx" ReadMode
> Data.ByteString.hGet h 4
=> "\255tOc"

明らかな何かが欠けていると思いますが、それが何であるかは私にはわかりません。私はここで何が間違っているのですか?

4

1 に答える 1

11

非ASCII文字('\ 255')は、8進数ではなく、10進数で表示されています。

確認はod、最初の4バイトによると、実際には8進数/ASCIIまたは1バイトの10進数です。

> $ od -c foo.idx  | head -1
0000000 377   t   O   c  \0  \0  \0 002  \0  \0 002 250  \0  \0 005   B

> $ od -t u1 /tmp/x | head -1
0000000 255 116  79  99   0   0   0   2   0   0   2 168   0   0   5  66

そしてHaskellでは:

> s <- Data.ByteString.readFile "foo.idx"
> Data.ByteString.take 4 s
"\255tOc"

したがって、10進数の255は8進数の377であることを覚えておいてください。

于 2011-04-07T22:45:36.413 に答える