I have u16 field in a code that assigned value like 0x1f
does this means 0x1f00
? can any one please tell me this. thanks. so 1f in upper half 8 bits of 16 bit field.
like 1f00 or 0001111100000000
CodePudding user response:
No, 0x1f is just another way of writing 31, so it does NOT mean 0x1f00, which is another way of writing 7936. (Tip: type "0x1f00 in decimal" into Google to verify this for yourself.)
It is correct to say that 0x1f is the same as 0x001f.
There is no standard data type named u16
, but I suppose you might be talking about uint16_t
from stdint.h
. The C standard does not say exactly how a uint16_t
is encoded as bits on your target machine, but most computers use a convention called "little endian", which means the number will be stored as two bytes, and the least-significant byte is first. So a uint16_t
with a value of 0x1f (also known as 0x001f) would be encoded as two bytes, in this order: 0x1f 0x00.
You can experiment with this for yourself by making a struct with some uint16_t
members in them, setting them to different values, and then casting a pointer to that struct to type uint8_t *
. Then use the pointer to read the byte values at different locations in the struct, to see exactly how your struct is stored in memory.