= 16) { a = hex[str / 16]; b = hex[str % 16]; write(1, &a, 1); write(1, &b, 1); } else { a = hex[str % 16]; write(1, &a, 1); } } void ft_putstr_non_printable(char *str) { int i; i = 0; while (str[i] != '\0') { if (str[i] >= 0 && str[i] <= 31) { write(1, "\\", 1); write(1, "0", 1); char_to_hex(str[i]); } else { write(1, &str[i], 1); } i++; } } int main() { char a[] = "ABCde\n\tfGHI"; ft_putstr_non_printable(a); return 0; }"> = 16) { a = hex[str / 16]; b = hex[str % 16]; write(1, &a, 1); write(1, &b, 1); } else { a = hex[str % 16]; write(1, &a, 1); } } void ft_putstr_non_printable(char *str) { int i; i = 0; while (str[i] != '\0') { if (str[i] >= 0 && str[i] <= 31) { write(1, "\\", 1); write(1, "0", 1); char_to_hex(str[i]); } else { write(1, &str[i], 1); } i++; } } int main() { char a[] = "ABCde\n\tfGHI"; ft_putstr_non_printable(a); return 0; }"> = 16) { a = hex[str / 16]; b = hex[str % 16]; write(1, &a, 1); write(1, &b, 1); } else { a = hex[str % 16]; write(1, &a, 1); } } void ft_putstr_non_printable(char *str) { int i; i = 0; while (str[i] != '\0') { if (str[i] >= 0 && str[i] <= 31) { write(1, "\\", 1); write(1, "0", 1); char_to_hex(str[i]); } else { write(1, &str[i], 1); } i++; } } int main() { char a[] = "ABCde\n\tfGHI"; ft_putstr_non_printable(a); return 0; }">
#include <stdio.h>
#include <unistd.h>
void char_to_hex(char str)
{
char a;
char b;
int i;
const char hex[20] = "0123456789abcdef";
i = 0;
if (str >= 16)
{
a = hex[str / 16];
b = hex[str % 16];
write(1, &a, 1);
write(1, &b, 1);
}
else
{
a = hex[str % 16];
write(1, &a, 1);
}
}
void ft_putstr_non_printable(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if (str[i] >= 0 && str[i] <= 31)
{
write(1, "\\\\", 1);
write(1, "0", 1);
char_to_hex(str[i]);
}
else
{
write(1, &str[i], 1);
}
i++;
}
}
int main() {
char a[] = "ABCde\\n\\tfGHI";
ft_putstr_non_printable(a);
return 0;
}
수정사항: 확장 아스키 코드 값도 고려해서 unsigned char 값으로 형 변환 시켜야 함.
#include <unistd.h>
void char_to_hex(unsigned char str)
{
unsigned char a;
const char hex[20] = "0123456789abcdef";
if (str >= 16)
{
a = hex[str/16];
}
else
{
a = hex[str];
write(1, &a, 1);
}
}
void ft_putstr_non_printable(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if ((str[i] >= 0 && str[i] <= 31) || (str[i] > 127))
{
write(1, "\\\\", 1);
write(1, "0", 1);
char_to_hex((unsigned char)(str[i]));
}
else
{
write(1, &str[i], 1);
}
i++;
}
}
// c02 test code - made by kyungjle
#include <stdio.h>
//void ft_putstr_non_printable(char *str);
int main(void)
{
ft_putstr_non_printable("asdfa asdf");
printf("\\n");
ft_putstr_non_printable("as\\ndfa\\200 asdf\\x61");
printf("\\n");
}
ASCII table - Table of ASCII codes, characters and symbols
#include <unistd.h>
void char_to_hex(unsigned char b)
{
const unsigned char hex[] = "0123456789abcdef";
write(1, &hex[(b / 16)], 1);
write(1, &hex[(b % 16)], 1);
}
void ft_putstr_non_printable(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if ((str[i] >= 0 && str[i] <= 31) || ((unsigned char)str[i] >= 127))
{
write(1, "\\\\", 1);
char_to_hex((unsigned char)str[i]);
}
else
{
write(1, &str[i], 1);
}
i++;
}
}
이상하게 코드를 출력할 때마다 원래 출력되어야 할 수가 출력이 되지 않고 다른 숫자가 출력이 되어서 이상하다고 생각했는데, 아스키 코드 8번 이후 부터는 제대로 출력이 잘 안된다고 한다. 즉 코드(숫자)로 입력하면 오류가 발생한다는 얘기이다.
그래서 문자를 직접 넣어서 출력해 본 결과 정상적으로 출력이 되는 것을 확인했다.
왜 이걸 오늘에야 안 것인지 …..