автомобильный отступ pygtkscintilla - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь перевести код на c ++, и я не могу понять, что такое "char linebuf [1000]", может ли какой-то единственный перевести это на python или объяснить, что такое linebuf. Спасибо! :) Взято из http://www.scintilla.org/ScintillaUsage.html

if  (ch  ==  '\r'  ||  ch  ==  '\n')  {
     char  linebuf[1000];
     int  curLine  =  GetCurrentLineNumber();
     int  lineLength  =  SendEditor(SCI_LINELENGTH,  curLine);
     //Platform::DebugPrintf("[CR] %d len = %d\n", curLine, lineLength);
     if  (curLine  >  0  &&  lineLength  <=  2)  {
     int  prevLineLength  =  SendEditor(SCI_LINELENGTH,  curLine  -  1);
     if  (prevLineLength  <  sizeof(linebuf))  {
         WORD  buflen  =  sizeof(linebuf);
         memcpy(linebuf,  &buflen,  sizeof(buflen));
         SendEditor(EM_GETLINE,  curLine  -  1,
                    reinterpret_cast<LPARAM>(static_cast<char  *>(linebuf)));
         linebuf[prevLineLength]  =  '\0';
         for  (int  pos  =  0;  linebuf[pos];  pos++)  {
             if  (linebuf[pos]  !=  ' '  &&  linebuf[pos]  !=  '\t')
                 linebuf[pos]  =  '\0';
         }
         SendEditor(EM_REPLACESEL,  0,  reinterpret_cast<LPARAM>(static_cast<char  *>(linebuf)));
     }
}

1 Ответ

0 голосов
/ 21 июля 2011

Это буфер для строки входного текста типа char[1000], то есть массив из 1000 char элементов (которые на самом деле байтов , потому что C ++ основан на C, который вturn предшествует всей идее кодировки символов).

Если мы действительно хотим буквальный перевод алгоритма, то наиболее близкое соответствие в Python, вероятно, что-то вроде array.array('B', [0]*1000).Однако это инициализирует массив Python, в то время как массив C ++ неинициализирован - на самом деле нет способа пропустить эту инициализацию в C ++;он просто резервирует пространство, не обращая никакого внимания на то, что уже находится в этой части памяти.

...