mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
bitfield: add from_bytes() function
This commit is contained in:
parent
ffa6bcfff5
commit
f30b0f1017
@ -77,6 +77,32 @@ fn cleartail(instance mut BitField) {
|
|||||||
|
|
||||||
// public functions
|
// public functions
|
||||||
|
|
||||||
|
// from_bytes() converts a byte arry into a bitfield.
|
||||||
|
// Be aware of possible trailing zeroes being added
|
||||||
|
// due to the underlying 32bit int containers.
|
||||||
|
pub fn from_bytes(input []byte) BitField {
|
||||||
|
mut output := new(input.len * 8)
|
||||||
|
for i, b in input {
|
||||||
|
pos := i / 4
|
||||||
|
match i % 4 {
|
||||||
|
0 {
|
||||||
|
output.field[pos] = output.field[pos] | (u32(b) << 24)
|
||||||
|
}
|
||||||
|
1 {
|
||||||
|
output.field[pos] = output.field[pos] | (u32(b) << 16)
|
||||||
|
}
|
||||||
|
2 {
|
||||||
|
output.field[pos] = output.field[pos] | (u32(b) << 8)
|
||||||
|
}
|
||||||
|
3 {
|
||||||
|
output.field[pos] = output.field[pos] | u32(b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
// str2bf() converts a string of characters ('0' and '1') to a bit
|
// str2bf() converts a string of characters ('0' and '1') to a bit
|
||||||
// array. Any character different from '0' is treated as '1'.
|
// array. Any character different from '0' is treated as '1'.
|
||||||
|
|
||||||
|
@ -122,6 +122,20 @@ fn test_hamming() {
|
|||||||
assert count == bitfield.hamming(input1, input2)
|
assert count == bitfield.hamming(input1, input2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_bf_from_bytes() {
|
||||||
|
input := [byte(0xF0), byte(0x0F), byte(0xF0), byte(0xFF)]
|
||||||
|
output := bitfield.from_bytes(input)
|
||||||
|
mut result := 1
|
||||||
|
for i := 0; i < input.len * 8; i++ {
|
||||||
|
expected := input[input.len - 1 - i / 8] >> i % 8 & 1
|
||||||
|
actual := output.getbit(i)
|
||||||
|
if expected != actual {
|
||||||
|
result = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert result == 1
|
||||||
|
}
|
||||||
|
|
||||||
fn test_bf_str2bf() {
|
fn test_bf_str2bf() {
|
||||||
rand.seed(time.now().uni)
|
rand.seed(time.now().uni)
|
||||||
len := 80
|
len := 80
|
||||||
|
Loading…
Reference in New Issue
Block a user