如何安全快速地从int中提取数字?

Ari*_*old 3 c c++ digits

我们目前有一些代码从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;
}
Run Code Online (Sandbox Code Playgroud)

我们正在使用C字符串,因为速度非常重要.

Ale*_*lli 7

您不需要instruction为此目的形成字符数组; 你只需要保留"两位数",如下所示:

int extract_op(unsigned int instruction)
{
    int first = 0;
    int second = 0;
    while(instruction) {
        second = first;
        first = instruction % 10;
        instruction /= 10;
    }
    return first + 10 * second;
}
Run Code Online (Sandbox Code Playgroud)

我认为这个表达式return是错误的,但它确实模仿你正在做的事情:第二个数字的十倍,再加上第一个数字.

我怀疑速度可能比你现在获得的速度更好,但当然,这取决于你在特定平台和编译器上进行测量.

  • 对不起,但你为什么要剥离当地人的所有元音?(另外,检查你的循环,你现在使用`first`而不是`frst`.) (3认同)
  • 亚历克斯有正确的答案.每当你想要使用弦乐进行数学运动时,请远离键盘,直到诱惑过去.ASCII不是一种可接受的算术形式. (2认同)