2011-04-07 45 views
6

Ben gerçekten packfile olmasını sağlamak için bir git packfile dizinden sihirli numarası almak isteyen kulüpler de git packfile indeksinden sihirli numarayı alın. pack format documentation, sihirli sayının "/ 377tOc" olduğunu belirtir. Ben mesela Ruby ile packfile açtığınızda, dosyayı okuma geri verir:Haskell

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

Ama Haskell bu alın: Ben belirgin bir şey eksik götürün

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

, ama bunun ne olduğu açık değil. Burada neyi yanlış yapıyorum?

cevap

10

('\ 255') sadece ondalık değil, sekizlik gösterilen ediliyor ASCII olmayan karakteri. Haskell

> $ 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 

Ve de: Onaylama

, od göre ilk 4 byte sekizlik/ASCII veya 1 bayt onlu, ciddi ciddi

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

Yani, sadece o 255 hatırlamak ondalık sekizte 377'dir.

+2

Teşekkürler Don, duymaya ihtiyacım olan şey buydu. Kafamın karıştığı şey, sanırım bunun sekiz olduğunu gösterdiğini düşündüm. Bazı Googling, http://book.realworldhaskell.org/read/characters-strings-and-escaping-rules.html#id690711'i buldu ve bu da sekizli sayıların bir "a", yani \ o377 == \ 255 olduğunu gösterir. Bu ek, başkalarının yararınadır, çünkü bütün bunları biliyorsunuz :) –