BitVecToInteger

Table of Contents

BitVecToInteger

Description

Convert bitvector to integer (up to 64 bits). Treats the bitvector as an unsigned integer with LSB first.

Parameters

NameDirectionDescription
bvinBitvector to convert (must be <= 64 bits)

Usage example (from documentation)

  u64 value = BitVecToInteger(&flags);

Usage example (Cross-references)

    } 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);
    StrPushBackZstr(o, "0o0");
    } else {
    u64          value  = BitVecToInteger(bv);
    StrIntFormat config = {.base = 8, .uppercase = false, .use_prefix = true};
    StrFromU64(o, value, &config);
    }
    
    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
    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");
    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");

Share :

Related Posts

BitVecToStr

BitVecToStr Description Convert bitvector to string representation. Each bit becomes ‘1’ or ‘0’ character. Caller must free the returned string.

Read More

BitVecFromStr

BitVecFromStr Description Create bitvector from string representation. String should contain only ‘1’ and ‘0’ characters.

Read More

BitVecNumericalCompare

BitVecNumericalCompare Description Compare two bitvectors as unsigned integers. Treats bitvectors as unsigned binary numbers (LSB first).

Read More