2011-04-07 19 views
6

में गिट पैकफाइल इंडेक्स से जादू संख्या प्राप्त करें मैं एक गिट पैकफाइल इंडेक्स से जादू संख्या प्राप्त करना चाहता हूं ताकि यह सुनिश्चित हो सके कि यह वास्तव में एक पैकफाइल है। pack format documentation बताता है कि जादू संख्या "/ 377tOc" है। जब मैं उदाहरण के लिए रूबी के साथ packfile खोलते हैं, तो मैं इस वापस जब फ़ाइल को पढ़ने मिलती है:हास्केल

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

लेकिन हास्केल में मैं इस मिल:

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

मैं इसे ले मैं कुछ स्पष्ट याद कर रहा हूँ, लेकिन यह मुझे स्पष्ट नहीं है कि वह क्या है। मुझसे यहां क्या गलत हो रहा है?

उत्तर

10

गैर-असीसी चरित्र ('\ 255') केवल दशमलव में दिखाया जा रहा है, ऑक्टल नहीं।

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

और हास्केल में:

पुष्टि od के अनुसार पहले 4 बाइट्स वास्तव में, अष्टाधारी/ascii या 1 बाइट दशमलव में हैं

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

तो, बस याद है कि 255 ऑक्टल में दशमलव 377 है।

+2

धन्यवाद डॉन, यही वही है जो मुझे सुनने की ज़रूरत है। मुझे क्या उलझन में है कि मैंने सोचा था कि यह संकेत दिया गया था कि यह ऑक्टल था। कुछ गूगलिंग http://book.realworldhaskell.org/read/characters-strings-and-escaping-rules.html#id690711 को इंगित करता है जो इंगित करता है कि octal संख्याओं को ओह के साथ आगे बढ़ाया जाता है, इसलिए \ o377 == \ 255। यह परिशिष्ट दूसरों के लाभ के लिए है, क्योंकि आप स्पष्ट रूप से यह सब जानते हैं :) –