BitVecToInteger
- Function
- August 22, 2025
Table of Contents
BitVecToInteger
BitVecToInteger
Description
Convert bitvector to integer (up to 64 bits). Treats the bitvector as an unsigned integer with LSB first.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to convert (must be <= 64 bits) |
Usage example (from documentation)
u64 value = BitVecToInteger(&flags);
Usage example (Cross-references)
- In
Io.c:2249
:
} else {
// Convert to integer (up to 64 bits) and format as hex
u64 value = BitVecToInteger(bv);
StrIntFormat config = {.base = 16, .uppercase = (fmt_info->flags & FMT_FLAG_CAPS) != 0, .use_prefix = true};
StrFromU64(o, value, &config);
- In
Io.c:2258
:
StrPushBackZstr(o, "0o0");
} else {
u64 value = BitVecToInteger(bv);
StrIntFormat config = {.base = 8, .uppercase = false, .use_prefix = true};
StrFromU64(o, value, &config);
- In
BitVec.c:822
:
}
u64 BitVecToInteger(BitVec *bv) {
ValidateBitVec(bv);
if (bv->length == 0) {
// Test BitVecToInteger function
bool test_bitvec_to_integer(void) {
printf("Testing BitVecToInteger\n");
BitVec bv = BitVecInit();
// Convert to integer
u64 value = BitVecToInteger(&bv);
// Check result - pattern 1011 (bits stored as: index 0=true, 1=false, 2=true, 3=true)
}
u64 value2 = BitVecToInteger(&bv2);
result = result && (value2 > 0); // Should be some positive value
// Test empty bitvec to integer
u64 value = BitVecToInteger(&bv);
result = result && (value == 0);
BitVec bv = BitVecFromInteger(value, bits);
u64 recovered = BitVecToInteger(&bv);
result = result && (recovered == value);
result = result && (large_bv.length == 64);
u64 large_value = BitVecToInteger(&large_bv);
result = result && (large_value == 0xFFFFFFFFFFFFFFFF);
BitVecDeinit(&large_bv);
}
u64 oversized_value = BitVecToInteger(&oversized);
// Should return some value or 0, but not crash
result = result && (oversized_value >= 0); // Always true for u64, but documents intent
StrDeinit(&empty_str);
u64 empty_value = BitVecToInteger(&empty);
result = result && (empty_value == 0);
// Test integer conversion (may depend on bit order)
u64 value = BitVecToInteger(&bv);
// We test that we get a consistent value (not necessarily the exact expected one)
result = result && (value > 0 || ZstrCompare(test_cases[i].pattern, "00000000") == 0);
// Test BitVecToInteger with NULL pointer - should abort
u64 value = BitVecToInteger(NULL);
(void)value; // Suppress unused variable warning
- In
Io.Read.c:680
:
BitVec bv2 = BitVecInit();
StrReadFmt("0xDEAD", "{}", bv2);
u64 value2 = BitVecToInteger(&bv2);
success = success && (value2 == 0xDEAD);
printf("Test 2 - Hex: 0x%llx, Success: %s\n", value2, (value2 == 0xDEAD) ? "true" : "false");
- In
Io.Read.c:688
:
BitVec bv3 = BitVecInit();
StrReadFmt("0o755", "{}", bv3);
u64 value3 = BitVecToInteger(&bv3);
success = success && (value3 == 0755);
printf("Test 3 - Octal: %llo, Success: %s\n", value3, (value3 == 0755) ? "true" : "false");