2016-12-22 2 views
1

Я работаю над приложением на C, где мне нужно показать символы Unicode UTF-8. Я получаю значения как бинарный поток байтов как 11010000 10100100 в качестве символьного массива, который является символом Unicode «Ф».Binary to UTF-8 in C

Я хочу хранить и отображать символ. Я попытался преобразовать двоичный код в шестнадцатеричный массив символов. Но печать с

void binaryToHex(char *bData) { 
    char hexaDecimal[MAX]; 
    int temp; 
    long int i = 0, j = 0; 
    while (bData[i]) { 
     bData[i] = bData[i] - 48; 

     ++i; 
    } 

    --i; 
    while (i - 2 >= 0) { 
     temp = bData[i - 3] * 8 + bData[i - 2] * 4 + bData[i - 1] * 2 + bData[i]; 
     if (temp > 9) 
      hexaDecimal[j++] = temp + 55; 
     else 
      hexaDecimal[j++] = temp + 48; 
     i = i - 4; 
    } 

    if (i == 1) 
     hexaDecimal[j] = bData[i - 1] * 2 + bData[i] + 48; 
    else if (i == 0) 
     hexaDecimal[j] = bData[i] + 48; 
    else 
     --j; 

    printf("Equivalent hexadecimal value: "); 
    char hexVal[MAX]; 
    // size_t len = j+1; 
    int k = 0;; 
    while (j >= 0) { 
     char *ch = (char*)hexaDecimal[j--]; 
     if (j % 2 == 0) { 
      hexVal[k] = '\\'; 
      k++; 
      hexVal[k] = 'x'; 
      k++; 
     } 
     printf("\nkk++Length %d ...J= %d.. ", k, j); 
     hexVal[k] = ch; 
     k++; 
     printf("%c", ch); 
    } 
    printf("KKKK+=== %d", k); 
    hexVal[k] = NULL; 

    // printf("\nkk++Length %d",strlen(hexVal)); 
    printf("\nMM+-+MM %s===\n ..>>>>", hexVal); 
} 

Только отображение значения как \ xD0 \ xA4. Для этого я использовал струнные манипуляции. Но при написании на пути

char s[]= "\xD0\xA4"; 
     OR 
char *s= "\xD0\xA4"; 
printf("\n %s",s); 

производит желаемый результат, который печатает символ «Ф». Как я могу получить правильную строку динамически? Есть ли библиотека для этого в C?

Код http://www.cquestions.com/2011/07/binary-to-hexadecimal-conversion-in.html.

Есть ли способ распечатать его из двоичного файла напрямую или из значения HEX. Или есть альтернатива?

+0

Это не ясно, что вы хотите достичь. Либо вы хотите напечатать символ, либо хотите преобразовать в hex. Для последнего не имеет значения, какую кодировку вы используете. – Olaf

+0

Пожалуйста, показать больше кода. Мы не можем помочь только с этими элементами. – Boiethios

+0

на данный момент я хочу напечатать символ из двоичного потока 11010000 10100100. Не могли бы вы помочь мне, как это сделать. После этого я могу попытаться выполнить более поздний вариант: – iSankha007

ответ

0

наконец преобразование двоичного массив символов Unicode в двоичном элемент кода, как преобразование 11010000 10100100 10000 100100, а затем преобразование в десятичную, а затем юникода решить мою проблему now.below ссылка я использовать для преобразования в UTF8 из десятичная дробь.

C++ Windows decimal to UTF-8 Character Conversion

resoursec я использовал:

https://www.youtube.com/watch?v=vLBtrd9Ar28

http://www.zehnet.de/2005/02/12/unicode-utf-8-tutorial/

4

Escape-кода, такие как \xD0интерпретируются компилятором, когда встречаются в значении символа или строки буквального. Компилятор заменяет их соответствующим байтом (или байтовой последовательностью в некоторых случаях). Они не имеют смысла для C во время выполнения.

Таким образом, вы не только усложняете себя, но и совершенно неправильно создаете и печатаете текст таких escape-последовательностей во время выполнения. То, что вы получаете, - именно то, что вы должны ожидать. Просто напечатайте последовательность буквенного байта, которую вы декодируете из ввода программы, без какого-либо наряда.

+0

Спасибо за ваш ответ. Фактически мой входной адаптер преобразовал весь поток байтов в char * array..i попытается получить исходный байт до разговора. – iSankha007