打印偏移量为十六进制,但以“两位数”对

时间:2017-08-07 16:32:44

标签: c

我想将变量'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中相当新。

2 个答案:

答案 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;