如何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