Скажем, есть код на пхп и на js
$i=5;
$var1 ="This is String 1";
$var2 ="This is String 2";
$var3 = ord($var1{$i}^$var2{$i});
echo $var3;
var var1, var2, var3, i;
i=5;
var1 ="This is String 1";
var2 ="This is String 2";
var3 = ord(var1[i]^var2[i]); //ord - реализованный на js аналог пхпшной. По сути charCodeAt();
console.log(var3);
Одинаковые(и какие?) ли будут результаты и почему?
Такая вот темка в напоминание)
Спустя 9 минут, 18 секунд (6.12.2011 - 21:55) TranceIT написал(а):
В js эта функция возвращает Unicode коды символов, в php возвращает ANSCII.
Точно не знаю, но смею предположить, что вывод будет одинаков за исключением пробелов, т. к. юникод и ANSCII позиции латинницы и цифр совпадают...
Точно не знаю, но смею предположить, что вывод будет одинаков за исключением пробелов, т. к. юникод и ANSCII позиции латинницы и цифр совпадают...
Спустя 1 минута, 25 секунд (6.12.2011 - 21:57) vital написал(а):
Цитата (TranceIT @ 6.12.2011 - 20:55) |
В js эта функция возвращает Unicode коды символов, в php возвращает ANSCII. |
Оба ord()-а возвращают одинаково. Читаем комментарии. Соль не там, следующий.
Спустя 9 минут, 36 секунд (6.12.2011 - 22:06) vital написал(а):
Цитата |
Точно не знаю, но смею предположить, что вывод будет одинаков за исключением пробелов, т. к. юникод и ANSCII позиции латинницы и цифр совпадают... |
Нет.
Спустя 7 минут, 50 секунд (6.12.2011 - 22:14) Игорь_Vasinsky написал(а):
может в 'крышке' дело?
JS
JS
Цитата |
Ставит 1 для каждого бита результата, для которого только один(но не оба) из соответствующих битов операндов равен 1. |
PHP
Цитата |
Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b |
помоему для разного предназначены....
Спустя 2 минуты, 12 секунд (6.12.2011 - 22:16) Winston написал(а):
Может собака зарыта в особенности JS-кой реализации ord ?
Спустя 6 секунд (6.12.2011 - 22:16) vital написал(а):
Цитата (Игорь_Vasinsky @ 6.12.2011 - 21:14) | ||||
может в 'крышке' дело? JS
PHP
помоему для разного предназначены.... |
"Крышка" называется XOR или "исключающее или", делает одно и тоже. Даже в твоих цитатах написано одно и то же)
Спустя 1 минута, 5 секунд (6.12.2011 - 22:17) Winston написал(а):
Цитата (Игорь_Vasinsky @ 6.12.2011 - 21:14) |
PHP Цитата Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b |
Походу ты это путаешь с по-бытовым ИЛИ |
Спустя 1 минута, 23 секунды (6.12.2011 - 22:19) vital написал(а):
Цитата (Winston @ 6.12.2011 - 21:16) |
Может собака зарыта в особенности JS-кой реализации ord ? |
В Js нету функции ord изначально. Есть string.charCodeAt(). Они работают чуть по разному, потому и написана руками своя обертка ord На js, и я указал в комментарии что она возвращает все верно заведомо. Т.е обе ф-и орд возвращают верыне данные - одинаково.
Спустя 7 минут, 26 секунд (6.12.2011 - 22:26) Игорь_Vasinsky написал(а):
Цитата |
Походу ты это путаешь с по-бытовым ИЛИ | |
да я прям с мануалов цытаты вывел.
Цитата |
"Крышка" называется XOR |
XOR называется в народе "Крышка"
да.. вообщето одно и тоже.
может в js с типами что нить...
Спустя 1 час, 5 минут, 6 секунд (6.12.2011 - 23:31) Invis1ble написал(а):
результат будет разным из-за различного механизма неявного преобразования типов при выполнении побитового xor
Спустя 10 минут, 45 секунд (6.12.2011 - 23:42) Игорь_Vasinsky написал(а):
и?
Спустя 4 минуты, 47 секунд (6.12.2011 - 23:47) Invis1ble написал(а):
vital
vital, я прав? или мимо?
vital, я прав? или мимо?
Спустя 2 минуты, 52 секунды (6.12.2011 - 23:50) vital написал(а):
Цитата (Игорь_Vasinsky @ 6.12.2011 - 22:42) |
и? |
Ну он прав, да. Но цимес то не раскрыл)
Суть в том, что если сделать str[i] в пхп - то пхп эту отдельную буковку возьмет как char в С => приведет к числу и ксор выполнится как надо.
В js же str[i] = тоже строка.
А если строку привести к числу, то всегда будет ноль т.е string=0(т.е. false) (кстати, емнип, в пхп будет 1(т.е. true, если строка не пуста и 0 если пуста)).
Вот и поулчается, что джс видит 2 строки, к-е ксорят как числа, делает их нулями, 0^0=0..
Кто скажет как поправить?)
Вобщем, тема в назидание - помните и не допускайте таких ошибок, ибо эту фигню дико сложно отловить и дебажить(
Спустя 7 минут, 15 секунд (6.12.2011 - 23:57) Invis1ble написал(а):
vital
Цитата |
Суть в том, что если сделать str[i] в пхп - то пхп эту отдельную буковку возьмет как char в С => приведет к числу и ксор выполнится как надо. |
неа, щас проверил
echo gettype('s'^'s'); // string
Цитата |
Кто скажет как поправить?) |
а что нужно получить вообще? т.е. назначение этих плясок какое?
ПС. Ладно, пошел я спать. Тема действительно полезная - подводные камни такие подводные :)
Спустя 4 минуты, 5 секунд (7.12.2011 - 00:01) Игорь_Vasinsky написал(а):
явное приведение к типу
var3 = ord(string(var1[i])^string(var2[i]));
Спустя 2 минуты, 43 секунды (7.12.2011 - 00:04) vital написал(а):
Цитата |
а что нужно получить вообще? т.е. назначение этих плясок какое? |
Ну вообще там идет алгоритм сравнения картинок, и надо побитово сравнить нечто вроде хеша
Цитата |
echo gettype('s'^'s'); // string |
Ну по другому быть не может. Тип то строка, мы же его не меняли, мы изменили битово значение.
Суть примера в том - как воспринялось оно в ксоре - как строка из буквы(=0), или как битовое значение этой буквы.
Спустя 4 минуты, 39 секунд (7.12.2011 - 00:08) vital написал(а):
Цитата (Игорь_Vasinsky @ 6.12.2011 - 23:01) |
явное приведение к типу
|
Нажми F12 и попробуй выполнить этот пример ;) это раз.Низя так делать в js. Нету в нем явного приведения к типу.. Во всяком случае таким путем. Второе - это же не решает проблему, если строку привести к строке. Я же выше писал(
Ну вобщем, конкретно в этом случае
var3 = ord(var1[i])^ord(var2[i]);
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar