Форум: Форум C++Разное
Новые темы: 00
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP -> C++
 
 автор: ~AquaZ~   (11.01.2010 в 02:15)   письмо автору
 
 

Подскажите, пожалуйста, как в Си++ будет выглядеть это:
for ($i = 0; $i < $sl; $i++)
$str[$i] = chr(ord($str[$i]) + ord($key[$i]));

З.Ы. sl - длина строки str, key такой же/длиннее

  Ответить  
 
 автор: exp   (11.01.2010 в 22:22)   письмо автору
 
   для: ~AquaZ~   (11.01.2010 в 02:15)
 

chr() , ord() не нужны
, символы строки можно просто складывать

, только непонятно что будет если например кодировка однобайтная и в cp866 символ 'я' это 0хFF
, при сложении 'я' + 'я' получится 0xFF0 , а это уже не один байт
(upd// здесь загнул :) получится что-то вроде 0x1FE)

Или строка в которую это всё складывается типа WCHAR[] ?

  Ответить  
 
 автор: ~AquaZ~   (12.01.2010 в 17:02)   письмо автору
 
   для: exp   (11.01.2010 в 22:22)
 

Строка типа String (в Builder String это класс). Мне самому не нравится идея складывать эквиваленты. Но в PHP работает, и процесс обратимый. Правда строка получается вдвое длиннее...
Как сделать, чтобы эквиваленты складывались и создавались 2 символа, т.е.
¶ (0xB6) + ¿ (0xBF) = ☺u (0x0175)
, но при этом как-нибудь правильно обработать
" (0x22) + f (0x42) = [ТАКОВА_СИМВАЛА_НЕТ]d (0x0064) 
?

  Ответить  
 
 автор: exp   (12.01.2010 в 22:19)   письмо автору
 
   для: ~AquaZ~   (12.01.2010 в 17:02)
 

чего-то наваял :)
попробовал просто лишний байт 0x01 так и записывать 0x01
#include <windows.h>

char* ishs = "строка не закодирована";
char* key = "ключ строка"
char res[sizeof(&ishs)*2];

void x_encode(void ) {
char* cTmp = ishs;
char* cKey = key;
char* cRes = (char*) res;
for( ; *cTmp != '\0'; cTmp++, cKey++, cRes++) {
if (*cKey == '\0') cKey = key;
    if ((*cTmp + *cKey) & 0x100) *cRes++ = 0x01 ; 
*cRes = (*cTmp + *cKey) ;
}
*cRes++ = '\0';
}
void x_decode(void ){
char* cRes = res;
char* cTmp = res;
char* cKey = key;
short w;
for( ; *cTmp != '\0';  cKey++, *cTmp++, *cRes++){
if (*cKey == 0) cKey = key;
if (*cTmp == 0x01) { // при складывании двух ненулей столько не бывает
w = 0x100;
cTmp++;
w |= *cTmp;
} else  w = *cTmp;
*cRes =  (w - *cKey) ;
}
*cRes++ = '\0';
}
int main(void){
  x_encode( );
  MessageBox(0,  res, "x_encode",0);
  x_decode( );
  MessageBox(0,  res, "x_decode",0);
  return 0;
}
здесь как-бы всё просится в одну функцию , обычно так навтыкаю, потом оптимизирую

, и делал в MSVC 6 , если делаю в остальных MSVC , там приходится убирать _UNICODE которое они инхерят по умолчанию. А классы я как-то не очень пробовал всякие

  Ответить  
 
 автор: ~AquaZ~   (12.01.2010 в 22:32)   письмо автору
 
   для: exp   (12.01.2010 в 22:19)
 

Я тут нихрена не понял =(
У меня в C++ Builder строка - это класс, а не typedef.
[upd] Всё, я 00 буду заменять на \0.
[upd] У \0 ASCII - 00!

  Ответить  
 
 автор: exp   (13.01.2010 в 00:41)   письмо автору
 
   для: ~AquaZ~   (12.01.2010 в 22:32)
 

Как и я нихрена не понимаю всякие String() :)
Тут всё просто,
а '\0' , я там даже в одном месте и написал как 0, просто так понятнее что сравнивается с символом. , так-же как вместо 0x01 мог делать 1или 01 (так вроде восьмиричная, если не путаю)

,я же говорю что сразу-же как понапечатал, поправил пару ошибок чтобы скомпилировалось и выложил, Всёроавно У Вас Буилдер ,) ошибки показали-бы , чего там он не переваривает.
Я на Си стараюсь кодить , без плюсплюсов
, делаю свою функцию вместо main, и получаю файл килобайта на 3-4 , который поизучая в дизассемблере можно понять чего компилятор сам оптимизирует , и чего можно ещё поизменить.
, строго 32x битные пока программы мучаю :) они понятнее

  Ответить  
 
 автор: ~AquaZ~   (13.01.2010 в 00:46)   письмо автору
 
   для: exp   (13.01.2010 в 00:41)
 

Спасибо. Тему можно закрыть.
А этот код я и скомпилировать не пытался, извините, диБилдыр консоль не жуёт.

  Ответить  
 
 автор: EXP   (13.01.2010 в 01:00)   письмо автору
 
   для: ~AquaZ~   (13.01.2010 в 00:46)
 

Да на здоровье :)
а в консоль там я ничего не выводил,
конечно мог всё это дело дооптимизировать, до вставок __asm{} правда редко доходит, но лениво

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования