首页 > 解决方案 > 仅使用 write 函数将 char 转换为 int

问题描述

例如,我有:

int num = 23;
char s;

s = num - '0';

write(1, s, 1); // return 23

我怎样才能做到?不允许使用除 write() 之外的函数;

标签: ctype-conversion

解决方案


要获得数字的第一位,您必须将其除以该数字以下的 10 的最高幂,然后将其添加到 的字符代码中'0'。打印完那个数字后,从 10 的幂中得到余数,然后用下一个 10 的低幂重复这个过程。继续直到 10 的幂达到 1。

#include <unistd.h>

int main() {
    int num = 235872347;
    if (num < 0) {
        num = -num;
        write(1, "-", 1);
    }
    int pow10 = 1000000000; // maximum power of 10 in signed 32 bit
    // first skip leading zeroes
    while (num < pow10) {
        pow10 /= 10;
    }
    for (; pow10 > 0; num %= pow10, pow10 /= 10) {
        char digit = '0' + num / pow10;
        write(1, &digit, 1);
    }
}

推荐阅读