2016-03-29 2 views
-3

У меня возникли проблемы с получением десятичных значений символов UTF-8, а затем их преобразование в двоичное (что-то вроде 12 = 0b110). Например, как я могу передать "ン" в свой двоичный код "11100011 10000011 10110011"?Как преобразовать символ UTF-8 в двоичный код в C

Я знаю, что UTF-8 использует несколько байтов. Я попытался распечатать его каждые 8 ​​бит слева направо. Для ASCII я использую способ ниже, чтобы распечатать его, но для UTF-8, что я могу использовать?

char asc[10]; 

while ((c = getchar()) != EOF) 
{ 
    int a = c; 
    asc = DecimalToBinary(a); 
    for (i = 7; i >= 0; i--) 
    { 
     printf("%c",*(asc + i)); 
    } 
} 

char *DecimalToBinary (int num) { 
    static char binary[] = {'0', '0','0', '0','0', '0','0', '0'}; 
    int i = 0; 
    while (num != 0) { 
     if (num % 2 == 0) 
     { 
      binary[i++] = '0'; 
     } 
     else { 
      binary[i++] = '1'; 
     } 
     num = num/2; 
    } 
    return binary; 
} 
+0

Вы имеете в виду * строка * нулей и единиц? – Biffen

+3

Вы берете первый байт, получаете его самый высокий бит и печатаете его, а затем следующий старший бит и т. Д. Затем вы берете второй байт и делаете то же самое. –

+1

, например, проверьте статью wikipedia об utf-8 и реализуйте алгоритм. @JoachimPileborg: Он хочет преобразовать в кодовую точку Юникода, а не двоичное представление кода utf-8. «Бинарное выражение» не является utf-8. – ikrabbe

ответ

1

Если вам нужно бинарное представление в виде UTF-8, то просто распечатайте бит за битом байтов.
Если вам нужно двоичное представление символа, то преобразуйте его в форму UTF-32, а затем в двоичную форму.

Смотрите также:
UTF-8, UTF-16, and UTF-32
https://gist.github.com/antonijn/9009746
Conversion of Char to Binary in C

Смежные вопросы