Вопрос по С++

GrAndSE

Тёмный
Модератор
Листинг кванта компилится и отлично работает (VS6). Единственное - я б посоветовал проверять результат выполнения
in = fopen ("index.htm", "r");
потому как если файла не существует то он не создастся как при
ou = fopen ("new.index.htm", "w");
в резуьтате имеем конфуз при попытке читать из in:
l = fgetc (in);

вот ссыль на проблемму блокнота с юникодом
VS6 компилятор поддерживает нормальное чтение из Юникода? Именно стандартным <stdio.h>? Хотя в принцыпе это не существенно если работа идёт с Английскими символами. Эти по-моему корректно везде распознаваться должны
 

quant

yeah
b.s. setty спасиба за линк - много интересного
ух блин так юникод это не совсем utf-8
точнее utf-8 это не совсем юникод
вот какойто алгоритм конвертации utf-8 в юникод
Код:
#define LOWER_6_BIT(u)    ((u) & 0x003f)
#define BIT7(a)           ((a) & 0x80)
#define BIT6(a)           ((a) & 0x40)

// Converts UTF-8 to unicode
// -------------------------
// lpSrcStr     Points to UTF8 encoded string
// cchSrc       Length of UTF8 string
// lpDestStr    Points to output buffer
// cchDest      Number of bytes in output buffer
int UTF8ToUnicode (char *lpSrcStr, int cchSrc, wchar_t *lpDestStr, int cchDest)
{
    int nTB = 0;    
    int cchWC = 0;  
    char *pUTF8 = lpSrcStr;
    char UTF8;

    while ((cchSrc--) && ((cchDest == 0) || (cchWC < cchDest)))
    {
        if (BIT7(*pUTF8) == 0)
        {
            if (cchDest)
                lpDestStr[cchWC] = (wchar_t)*pUTF8;
            cchWC++;
        }
        else if (BIT6(*pUTF8) == 0)
        {
            if (nTB != 0)
            {
                nTB--;
                if (cchDest)
                {
                    lpDestStr[cchWC] <<= 6;
                    lpDestStr[cchWC] |= LOWER_6_BIT(*pUTF8);
                }
                if (nTB == 0)
                    cchWC++;
            }
        }
        else
        {
            if (nTB > 0)
            {
                nTB = 0;
                cchWC++;
            }
            else
            {
                UTF8 = *pUTF8;
                while (BIT7(UTF8) != 0)
                {
                    UTF8 <<= 1;
                    nTB++;
                }
                if (cchDest)
                    lpDestStr[cchWC] = UTF8 >> nTB;
                nTB--;
            }
        }
        pUTF8++;
    }
    return cchWC;
}
в моей проблеме кодировка utf-8 на выходе хотелось бы получить такую же
кстати после конвертации в конце каждой страницы присутствует знак вопроса O.o
алгоритм робочий! не юникод лапатит на ура - на Windows, скомилировал gcc на Ubuntu - нифига не делает
страничку берёт, шото с ней делает, а на выходе точно такая же
мдааа я себе кодировки раньше представлял совсем по другому, почитав вижу нефиг мне вводить wchar_t - у меня все символы на латинице, а я пытался заменив вот это
Код:
	const wchar_t math[]={L"ktv"}, zamena[]=(L"vip");
	wchar_t l;
	int counter = 0, cc = 0, leng = (sizeof(math) >> 1) - 1, zleng = (sizeof (zamena) >> 1) - 1, j;
ладно щас попробуем-с
итак всё вродебы работает но неасилил мой алгоритм 3 весчи - перевод строки, значок (c) и конец файла
 
Останнє редагування:

alexmore

JuveFan
Товарищи, нужен Borland C++ (не Builder) с досовским интерфесом.
Оболочка очень похожа на паскалевскую. Буду очень благодарен.
 

GrAndSE

Тёмный
Модератор
алгоритм робочий! не юникод лапатит на ура - на Windows, скомилировал gcc на Ubuntu - нифига не делает
страничку берёт, шото с ней делает, а на выходе точно такая же
Может проблемма в "дефолтной" кодировке? Я точно не помню, но кажись у gcc какая-то привязка есть к системной кодировке. Посмотри этот момент. Может там тебе ничего даже конвертировать не нужно будет :)
 

quant

yeah
Відповідь: Вопрос по С++

Код:
   printf ("8 & 4 = %d\n", 8 & 4);
   if (8 & 4 == 0)
      { printf ("zero\n"); };
   printf ("endline\n");
запускаю...
Код:
8 & 4 = 0
endline
:eusa_wall
 

sergey

Wheeeeeeeee
У тебя сначала идет сравнение 4 с 0 а потом операция побитового И с 8-кой.
if((8 & 4) == 0)
 

quant

yeah
Відповідь: Вопрос по С++

мне необходимо зделать ссылку строго на 1 байт
unsigned short* неподходит так как в разных компиляторах его размер может быть разным
 
Зверху