Slide 1

Slide 1 text

byteྻͷbitදݱΛಘΔ encodingϥΠϒϥϦ࡞ͬͨ golang.tokyo #32 2022-05-19 @convto

Slide 2

Slide 2 text

@convto גࣜձࣾKyashॴଐ ϨΠϠ௿Ίͷٕज़΍҉߸ٕज़ʹڵຯ ͋Γ աڈʹ͸protobufͷ؆қతͳύʔα ʔॻ͍ͨΓplain RSA࣮૷ॻ͍ͨΓ ͠·ͨ͠

Slide 3

Slide 3 text

͸͡Ίʹ • ࣗ෼͕࢖͍͔ͨͬͨͷͰബ͍encodingϥΠϒϥϦΛ࡞ͬͨͷͰ঺հ͠·͢ • Ϟνϕʔγϣϯ • ࢖͍ํ • etc • ΍Γ͍ͨ͜ͱ͕ඪ४ϥΠϒϥϦͷencoding/hexʹΊͪΌΊͪΌࣅ͍ͯΔͷͰ͔ͳΓࢀߟʹ ͯ͠·͢ • Ҏલهࣄॻ͍ͨͷͰͦͬͪʹ΋·ͱ·ͬͯ·͢ • https://convto.hatenablog.com/entry/2022/05/08/160157

Slide 4

Slide 4 text

github.com/ convto/bit ͨͱ͑͹೚ҙͷencodingͷόΠφϦදݱΛ֬ೝ͍ͨ͠ͱ͖ͳͲʹ࢖͑Δ https://go.dev/play/p/bs42fhnEbXh • όΠφϦΛ0ͱ1ͷจࣈྻͰ දݱ͢Δ • Encode/Decode/DumpΛ αϙʔτ • io.Reader/io.Writer΋࡞ΕΔ

Slide 5

Slide 5 text

Contents 1. Ϟνϕʔγϣϯ 2. ར༻ํ๏ • Encode • Decode • Dump 3. ΍ͬͯΔ͜ͱ 4. ·ͱΊ

Slide 6

Slide 6 text

Ϟνϕʔγϣϯ

Slide 7

Slide 7 text

ੜͷbitදݱ஌Γ͍ͨͱ͖͋Δ • ৽͍͠encodingௐ΂ͯΔͱ͖ͱ͔͸όΠφϦͲ͏ͳͬͯΔͷ͔ؾʹͳΔ • byte੔ྻ͞Εͯͳ͍ͱ͖ʹhexͩͱ೴಺Ͱbitม׵ͯ͠ઌ಄Nbit͕ͳΜ΅Ͱɺޙଓͷbit͕ͳΜ΅Ͱ…ͱͳΓ໘౗ͳͷ ͰbitͰΈΕΔͱخ͍͠ • `xxd -b` ͱ͔ͰΈΕΔ͕GoϓϩάϥϜ͔Βॊೈʹ࢖͍͍ͨ • forϧʔϓͰ `fmt.Printf("%08b", src[i])` Έ͍ͨͳײ͡ʹ͢Δͷ΋͋Γ͚ͩͲҎԼͷ՝୊͕͋Δ • io͕ॊೈͰͳ͍ • ૉ๿ʹfmtύοέʔδʹґଘͯ͠ΔͷͰͦͦ͜͜ίετֻ͕͔Γͦ͏ • ग़ྗ͕ζϥʔͱͰ͖ͯͯಡΈͮΒ͍ɻdebug༻్ͳΒ͍͍ײ͡ʹग़ྗ͍ͨ͠ • ௐ΂ͨൣғͩͱͦ͏͍͏ظ଴ΛຬͨͤΔύοέʔδ͸ͳͦ͞͏ͩͬͨͷͰ࡞ͬͨ(bit୯Ґioͱ͔͸͋Δ)

Slide 8

Slide 8 text

ར༻ํ๏

Slide 9

Slide 9 text

σβΠϯ͸ encoding/hex Λࢀߟʹ͠·ͨ͠ • Encode/Decodeʹ͘Θ͑ioͷαϙʔτͱdumpग़ྗ • ͭ͡͸ encoding/hex ͸objdump૬౰ͷDumpΛαϙʔτͯ͠Δ • https://pkg.go.dev/encoding/hex#example-Dump • hex͸base64ͳͲͱҧͬͯ1char͋ͨΓ4bitදݱͰ8ͷ໿਺͔ͩΒbyte ੔ྻΛؾʹ͢Δඞཁͳ͍ͷ΋ࣅ͍ͯΔ

Slide 10

Slide 10 text

Encode https://go.dev/play/p/XwAGDwtVj2t • hex΍base64ͱ͓ͳ͘͡ ඞཁͳsizeͷdst֬อ͸ݺ ͼग़͠ଆͷ੹຿

Slide 11

Slide 11 text

Encode (io.Writer) https://go.dev/play/p/HdI5SrpCCUN • streamΛ͍͍ײ͡ʹѻ͍ ͍ͨͷͰio.Writer΋αϙ ʔτ

Slide 12

Slide 12 text

Decode https://go.dev/play/p/7y7t1OqDpAn • decode΋͍͍ײ͡ͷdstΛ༻ҙ ͢Δͷ͸ݺͼग़͠ଆͷ੹຿ • bitදݱ͕8ͷഒ਺Ͱͳ͍ͱ͏· ͘byte͕࡞Εͳ͍ͷͰɺ8ͷഒ ਺Ͱͳ͍ͱ͖͸ΤϥʔΛ͔͑͠ ͯ·͢ɻhex΋ಉ༷ͷ࡞Γ

Slide 13

Slide 13 text

Decode (io.Reader) https://go.dev/play/p/EoYkmkjn_e8 • ͬͪ͜΋io.ReaderΛαϙʔτ • bitදݱ͕8ͷഒ਺Ͱͳ͍ͱ͖ ͸ io.ErrUnexpectedEOF Λ ฦ͠·͢(ݻఆioͰΩϦ͕ѱ͍ ͱ͖ͷΤϥʔ)

Slide 14

Slide 14 text

Dump https://go.dev/play/p/-_dKBj7TkOW • `xxd -b` ૬౰ͷग़ྗΛαϙʔτ • debug༻్ͳΒ͜Ε͕͓͢͢Ί • ݩόΠφϦΛ෮ݩ͍ͨ͠ͳΒ Encode/DecodeΛ࢖͏ɺΈͨ ͍ͳײ͡ͷ࢖͍෼͚Λ૝ఆ

Slide 15

Slide 15 text

΍ͬͯΔ͜ͱ

Slide 16

Slide 16 text

ίΞ෦෼͸୯७ • ΍Γ͍ͨ͜ͱ͸byte͝ͱʹ8ݸͷbit දݱʹόϥ͚ͩ͢ • 1ඵͰࢥ͍͖ͭͦ͏ͳॲཧΛ͔ͭͬ ͍ͯ·͢ • ৭ʑ࣮૷Λൺֱ͍͕ͨ͠ɺ΍Γͨ ͍͜ͱࣗମ͕୯७ͳͷͰͦΜͳࠩ Ͱͳͦ͞͏Ͱ͜ͷ··ʹ͍ͯ͠Δ

Slide 17

Slide 17 text

·ͱΊ

Slide 18

Slide 18 text

byteྻͷbitදݱಘΔύοέʔδͭͬͨ͘Α • encoding/hexΛࢀߟʹͨ͠Α • Encode/Decodeαϙʔτ, ioαϙʔτ, Dumpग़ྗαϙʔτ • όΠφϦͰ༡Ϳͱ͖ͷσόοά༻్Ͱͥͻʂ • ඪ४ͷencodingܥͷύοέʔδ͸ioͷѻ͍ͱ͔ͰษڧʹͳΔͷͰ͓ ͢͢Ί

Slide 19

Slide 19 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ