簡體   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