Я работаю над приложением на 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. Или есть альтернатива?
Это не ясно, что вы хотите достичь. Либо вы хотите напечатать символ, либо хотите преобразовать в hex. Для последнего не имеет значения, какую кодировку вы используете. – Olaf
Пожалуйста, показать больше кода. Мы не можем помочь только с этими элементами. – Boiethios
на данный момент я хочу напечатать символ из двоичного потока 11010000 10100100. Не могли бы вы помочь мне, как это сделать. После этого я могу попытаться выполнить более поздний вариант: – iSankha007