我想将变量'offset'的前6位数字打印为十六进制,但首先是前两位数字,然后是接下来的两位数字,最后一位是数字。我想在每次偏移的特定区域打印。
uint32_t offset = 0;
//iterate offset to a specific point
printf("%06X ", offset);
//result is for example 989680
我想要的是什么:
uint32_t offset = 0;
//iterate offset to a specific point
printf("%02X", offset);
printf("%02X", offset);
printf("%02X ", offset);
//result should be 989680 but is logically 989898
最后一个代码中的printout语句必须是三次,而不是一个语句
//I dont want this
printf("%02X, %02X, %02X ", offset);
我想我必须用指针做这个,但我在c中相当新。
答案 0 :(得分:5)
对于uint16_t
,您的十六进制值太长,请尝试使用uint32_t
。类似的东西:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
uint32_t offset = 0x989680;
printf("%02"PRIX32" ", (offset & 0x00ff0000) >> 16);
printf("%02"PRIX32" ", (offset & 0x0000ff00) >> 8);
printf("%02"PRIX32" ", (offset & 0x000000ff) >> 0);
return 0;
}
输出:
98 96 80
答案 1 :(得分:0)
> |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| > |0|1|0|1|0|1|1|0|1|0|1 |0 |1 |1 |0 |1 |
首先你需要前4位,所以右移12x
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
并将其存储到var1,保持它,你得到它。
uint8_t var1 = (offset >> 12);
uint8_t var2 = (offset >> 8) & 0x0f;
uint8_t var3 = (offset >> 4) & 0x0f;