Search code examples
rustasciibit

How to convert a byte to the correct decimal representation?


I have a function that checks a bit in a specific index of a string (converted to byte representation):

fn check_bit(s: String) -> bool {
    let bytes = s.as_bytes(); // converts string to bytes
    let byte = s[0]; // pick first byte
    // byte here seems to be in decimal representation
    byte | 0xf7 == 0xff // therefore this returns incorrect value
}

after printing and doing arithmetic operations on the byte variable, I noticed that byte is a decimal number. For example, for the ASCII value of char b (0x98), byte stores 98 as decimal, which results in an incorrect value when doing bitwise operations on them. How can I convert this decimal value to correct hex, binary or decimal representation? (for 0x98 I am expecting to get decimal value of 152)


Solution

  • noticed that byte is a decimal number

    An integer has no intrinsic base, it is just a bit pattern in memory. You can write them out in a string as a decimal, binary, octal, etc., but the value in memory is the same.

    In other words, integers are not stored in memory as strings.

    For example, for ascii value of char b (0x98), byte simply stores 98 as decimal

    ASCII b is not 0x98, it is 98, which is 0x62:

    assert_eq!(98, 0x62);
    assert_eq!(98, "b".as_bytes()[0]);
    assert_eq!(98, 'b' as i32);
    

    How can I convert this decimal value to correct hex, binary or decimal representation?

    Such a conversion does not make sense because integers are not stored as strings as explained above.