我们目前有一些代码可以从 int 中提取数字,但我需要将其转换为没有 snprintf 的平台,而且我担心缓冲区溢出。我已经开始编写自己的可移植(和优化)snprintf,但有人告诉我在这里问,以防有人有更好的主意。

int extract_op(int instruction)
{
    char buffer[OP_LEN+1];
    snprintf(buffer, sizeof(buffer), "%0*u", OP_LEN, instruction);
    return (buffer[1] - 48) * 10 + buffer[0] - 48;
}

我们使用 C 字符串是因为速度非常重要。

最佳答案

使用 sprintf 应该没问题。 sizeof type * 3 * CHAR_BIT / 8 + 2 是一个足够大的缓冲区,用于打印 type 类型的整数。如果您假设 CHAR_BIT 为 8 或者您只关心无符号格式,则可以简化此表达式。它背后的基本思想是每个字节最多贡献 3 位十进制(或八进制)数字,并且您需要空间用于符号和空终止。

关于c++ - 如何安全快速地从 int 中提取数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3605987/

10-11 22:11
查看更多