【问题标题】:Printing long value to hex with leading zeroes将长值打印为带前导零的十六进制
【发布时间】:2020-06-02 13:52:23
【问题描述】:

我一直在使用这个函数来打印带前导零和 4 位小数的 int 值,效果很好。

使用 Arduino IDE 1.8.12

void printHex(int num, int precision)
{
  Serial.println(num);
  char tmp[16];
  char format[128];
  sprintf(format, "%%.%dX", precision);
  sprintf(tmp, format, num);
  Serial.println(tmp);
}

调用函数printHex(100,4)会打印出0064

我现在想打印 5 位小数的长值,但它并不像我想象的那么简单。

例如printHex(200000,5) 应该打印出30D40,而printHex(0,5) 应该打印出00000

我尝试将 int num 更改为 long num 并打印 5 位,但 MSB 始终为 0

目前我收到的是00D40 而不是30D40

【问题讨论】:

  • 它确实产生了 - 请参阅here。也许你的串口的另一端有问题?
  • 奇怪,在 Arduino 下 printHex(200000,5) 我得到 00D40

标签: c++ arduino


【解决方案1】:

想通了,必须在 sprintf 中使用 uint32_t 和 long

void printHex(uint32_t num, int precision)
{
  char tmp[16];
  char format[128];
  sprintf(format, "%%0%dlX", precision);
  sprintf(tmp, format, num);
  Serial.print(tmp);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多