繁体   English   中英

uint64_t 字符串转换和前4个字符的提取

[英]uint64_t string conversion and extraction of first 4 characters

我收到了这个 function 来检查给定的 4 位 PIN 码是否正确。 此 PIN 是长度为 5 的字符串(例如“1234\0”)。 真正的 PIN 是经过一些计算得到的,通过将 uint64_t 转换为字符串并提取前 4 个字符:

uint8_t pin_verification(uint64_t number, uint8_t *pin)
{
  uint8_t string[14];

  // ASCII string conversion
  sprintf((char *)(string), "%llu", number);

  // Pin verification
  if (memcmp(pin, string, 4))
  {
    return 0;
  }
  else
  {
    return 1;
  }
}

有人告诉我它可以工作,但我试图在 STM32 芯片上运行它,而sprintf function 不能正常工作。 我已经尝试过使用inttypes.h库中的PRIu64修饰符等解决方案,但它仍然不起作用。

如果有办法避免使用sprintf ,我不介意更改此 function 。

谢谢!

在 STM32 芯片上运行它并且 sprintf function 不能正常工作

您正在使用不支持 long long printf 格式说明符的标准 C 库实现(很可能是“nano”中的newlib )版本。

任何一个:

  • 不要使用 long long 格式说明符并找到其他方式
  • 提供你自己的库来打印长长的数字
  • 使用支持长长打印的C标准库
    • IE。 使用完整的 newlib 版本,即。 从编译器命令行中删除-specs=nano.specs-lnano

注意:

  • told that it can be 14 digits long maximum然后 14 字节缓冲区太短而无法存储 14 位的字符串。
  • 更喜欢snprintf来防止缓冲区溢出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM