YAPC::EU 2018 Glasgow Update!
This commit is contained in:
parent
22f33d4004
commit
4e2d22a71d
1170 changed files with 15042 additions and 3047 deletions
65
Task/Bitwise-IO/Go/bitwise-io-2.go
Normal file
65
Task/Bitwise-IO/Go/bitwise-io-2.go
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
package bit
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
)
|
||||
|
||||
func ExampleWriter_WriteBits() {
|
||||
var buf bytes.Buffer
|
||||
bw := NewWriter(&buf, MSB)
|
||||
bw.WriteBits(0x0f, 4) // Writes 1111
|
||||
bw.WriteBits(0x00, 1) // 0
|
||||
bw.WriteBits(0x13, 5) // 1001 1
|
||||
// Close will flush with zero bits, in this case
|
||||
// 0000 00
|
||||
if err := bw.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Printf("%08b", buf.Bytes())
|
||||
// Output:
|
||||
// [11110100 11000000]
|
||||
}
|
||||
|
||||
func Example() {
|
||||
const message = "This is a test."
|
||||
fmt.Printf("%q as bytes: % 02[1]X\n", message, []byte(message))
|
||||
fmt.Printf(" original bits: %08b\n", []byte(message))
|
||||
|
||||
// Re-write in 7 bit chunks to buf:
|
||||
var buf bytes.Buffer
|
||||
bw := NewWriter(&buf, MSB)
|
||||
for _, r := range message {
|
||||
bw.WriteBits(uint16(r), 7) // nolint: errcheck
|
||||
}
|
||||
if err := bw.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Printf("Written bitstream: %08b\n", buf.Bytes())
|
||||
fmt.Printf("Written bytes: % 02X\n", buf.Bytes())
|
||||
|
||||
// Read back in 7 bit chunks:
|
||||
br := NewReader(&buf, MSB)
|
||||
var result []byte
|
||||
for {
|
||||
v, err := br.ReadBits(7)
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
log.Fatal(err)
|
||||
}
|
||||
break
|
||||
}
|
||||
if v != 0 {
|
||||
result = append(result, byte(v))
|
||||
}
|
||||
}
|
||||
fmt.Printf("Read back as \"%s\"\n", result)
|
||||
// Output:
|
||||
// "This is a test." as bytes: 54 68 69 73 20 69 73 20 61 20 74 65 73 74 2E
|
||||
// original bits: [01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01110100 01100101 01110011 01110100 00101110]
|
||||
// Written bitstream: [10101001 10100011 01001111 00110100 00011010 01111001 10100000 11000010 10000011 10100110 01011110 01111101 00010111 00000000]
|
||||
// Written bytes: A9 A3 4F 34 1A 79 A0 C2 83 A6 5E 7D 17 00
|
||||
// Read back as "This is a test."
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue