我们目前有一些代码从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字符串,因为速度非常重要.
您不需要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是错误的,但它确实模仿你正在做的事情:第二个数字的十倍,再加上第一个数字.
我怀疑速度可能比你现在获得的速度更好,但当然,这取决于你在特定平台和编译器上进行测量.