如何write()n的十六进制表示?

我试图用write()十六进制表示n没有任何成功。

我的代码ft_putstr_non_printable.c

#include <unistd.h>

void    ft_putstr_non_printable(char *str)
{
    int             i;
    unsigned char   a;
    char            c;

    i = 0;
    a = 0x0;
    while (str[i] != '')
    {
        if (str[i] <= 31 || str[i] == 127)
        {
            a = str[i];
            write(1, &a, 1);
        }
        else
        {
            c = str[i];
            write(1, &c, 1);
        }
        i++;
    }
}

并且main.c

#include <stdio.h>
#include <string.h>

#include "ft_putstr_non_printable.c"

int main(void)
{
    char a[] = "n au revoira";
    char b[] = "omellette du fromageb";
    char c[] = "coeuf@ca6vae fef";
    char d[] = " Batata x7F rfg";
    char e[] = "roquefort`[e{forte-e_tem,bolor n feff";
    char f[] = " we 9are 78familly x1F rgfenf";

    ft_putstr_non_printable(a);
    ft_putstr_non_printable(b);
    ft_putstr_non_printable(c);
    ft_putstr_non_printable(d);
    ft_putstr_non_printable(e);
    ft_putstr_non_printable(f);
}

难道我做错了什么?我如何得到 x0a?

编辑:我不能使用printf(). 我仅限于write().

回答

而是在str[i]超出可打印范围时写一个字符,形成一个小字符串并写下来。

    // if (str[i] <= 31 || str[i] == 127)
    if (str[i] <= 31 || str[i] >= 127) {
        unsigned char a = str[i];
        char buf[5];
        int len = sprintf(buf, "x%02X", a);
        // write(1, &a, 1);
        write(1, buf, len);
    }

我只能写()

如果sprintf()不可用:

        // int len = sprintf(buf, "x%02X", a);
        buf[0] = ''; 
        buf[1] = 'x'; 
        buf[2] = "0123456789ABCDEF"[a/16];
        buf[3] = "0123456789ABCDEF"[a%16];
        buf[4] = '';
        len = 4;

先进的:

char可能是unsigned,因此值可能大于 127。

为了很好地逆转这个过程,以十六进制打印可能是有意义的。

    if (str[i] <= 31 || str[i] >= 127 || str[i] == '') {

  • @chux-ReinstateMonica Ohhhhhh

以上是如何write()n的十六进制表示?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>