Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP не правильно устанавливает тип 
:(
    Опции темы
RinOSpro
Дата 24.12.2007, 19:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте мне нужно было код с с++ перевести на php 
Код

for (i = 1; i < len; i++)
    key[i] = lock[i] xor lock[i-1];
The first key character is calculated from the first lock character and the last two lock characters:


key[0] = lock[0] xor lock[len-1] xor lock[len-2] xor 5
Next, every character in the key must be nibble-swapped:


for (i = 0; i < len; i++)
    key[i] = ((key[i]<<4) & 240) | ((key[i]>>4) & 15)



вот так перевел
Код

$keyy = "";
settype($keyy,"string");

for ($i = 1; $i < strlen($lock); $i++)
$keyy[$i] = $lock[$i] xor $lock[$i-1];

$keyy[0] = $lock[0] xor $lock[strlen($lock)-1] xor $lock[strlen($lock)-2] xor 5;

for ($i = 0; $i < strlen($lock); $i++)
$keyy[$i] = (($keyy[$i]<<4) & 240) | (($keyy[$i]>>4) & 15);

echo $keyy;

}



Но $keyy имеет тип Array хотя я и settype использовал!

Помагите пожалуйста!

Это сообщение отредактировал(а) RinOSpro - 24.12.2007, 19:21
  Вверх
Levsha
Дата 24.12.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



Как вариант можно в конце массив перевести в строку
Код
$keyy = implode ("", $keyy);



--------------------
PM   Вверх
skyboy
Дата 24.12.2007, 21:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



дело в другом.
точнее, немного в другом.
просто у тебя $keyy - пустая строка. потому попытка "достучаться" через индекс до 5, 7 и 29 символов ничего не устанавливает. тип меняется на массив и вставляются значения как элементы с указанным индексом. потому либо вариант, предложенный Levsha, либо в начале
Код

$keyy= str_pad($keyy,strlen($lock));


Добавлено через 3 минуты и 26 секунд
Цитата(skyboy @  24.12.2007,  20:10 Найти цитируемый пост)
дело в другом.

в смысле - проблема не в "неверном определении РНР типа", а в неверном подходе.
когда ты работаешь в С/С++, то запись $keyy[55] означает запись в ячейку памяти по адресу $keyy + sizeof($keyy[0]). И потом, когда говоришь "выводи от адреса $keyy до символа \0 как строку" С/С++ выводит.
А в случае с РНР работы с памятью напрямую не происходит. Интепретатор, видя, что ты пытаешься получить от пустого значения элемента по индексу попросту меняет тип(сказывается динамическая типизация), так, чтоб твои действия(взятие несуществующего индекса) имело хоть какой-то смысл. вот и все.
PM MAIL   Вверх
Levsha
Дата 25.12.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



skyboy, согласен что дело в другом. просто предложил действенный способ если не надо париться smile 
Ну а если запариться
Код

$keyy = " "; //RinOSpro, заметь, что переменная не пустая, в ней пробел!!!!
$lock = "11232342341";//взял произвольную последовательность чисел

for ($i = 1; $i < strlen($lock); $i++) $keyy .= $lock[$i] xor $lock[$i-1];
//вот тут вся соль. Когда строка еще не сформирована, новое значение мы к ней прибавляем с помощью ".=" . 
//Как к массиву через "[]" к ней еще нельзя обращаться

echo $keyy."\n";//поглядим

$keyy[0] = $lock[0] xor $lock[strlen($lock)-1] xor $lock[strlen($lock)-2] xor 5;

echo $keyy."\n";//поглядим еще раз

for ($i=0; $i< strlen($lock); $i++) $keyy[$i] = (($keyy[$i]<<4) & 240) | (($keyy[$i]>>4) & 15);
//теперь, когда строка нужной длины у нас сформирована, к ней можно обращаться через [$i]

echo $keyy."\n";//поглядим результат



Это сообщение отредактировал(а) Levsha - 25.12.2007, 07:02


--------------------
PM   Вверх
RinOSpro
Дата 25.12.2007, 20:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо! сейчас тип правильно определяется. но результат какой то не такой. 

К примеру $lock = EXTENDEDPROTOCOL]pLLi6vTpnvU67>vqPf:MH]X4BCwin;
Тогда $keyy = 00000000000000000000660000001000008000001000000000000000000000000066000000100000800000100000

что то не верно
  Вверх
Levsha
Дата 26.12.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



А какой должен быть $keyy
Что в С++ означает "xor" ?

Точно не скажу, но насколько я помню, когда я работал с этим оператором в php , он работал только с числами... И еще помлю что он давал разные результаты на разных платформах, при одинаковых условиях. Короче он мутный какой-то!  smile 


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.