Intereting Posts
Синхронизированные функции с использованием PHP Как получить подстроку на протяжении всего документа, зная маркеры? Случайное изображение PHP: если нет имени Знайте, если электронная почта была ответом, используя IMAP в PHP PHP заменяет пробелы подчеркиваниями Добавление опции «другой, пожалуйста, укажите» в поле формы ChoiceType в Symfony Работа со временем и после полуночи Expose «использовать» классы для включенного файла Неустранимая ошибка: Class 'Stripe' не найден в C: \ wamp \ www \ Продолжайте получать «Ежедневный лимит неисполненного использования превышен. Продолжение использования требует регистрации "при попытке Google плюс вход в мое веб-приложение PHP mysqli – возвращает ассоциативный массив из подготовленного оператора CodeIgniter: SSL / TLS SMTP Auth Электронная почта от PHPMailer Code Что такое «any» в wsdl и как я могу вызвать функцию wsdl с помощью php? Вводная фильтрация PHP для сложных массивов

Что делает C # при приведении типа письма к int?

Мы должны внедрить шифрование для внешнего интерфейса. Владелец интерфейса предоставил документацию о том, как подготовить то же шифрование на нашей стороне. Однако эта документация находится на C #, и мы работаем в PHP.

Большинство частей, которые мы понимаем, за исключением тех случаев, когда они, похоже, вызывают хеш для int. Их код гласит:

// hashString exists and is a md5 a like string int[] keyBuffer = new int[hashString.length]; for (int i=0; i<hashString.length; i++) { keyBuffer[i] = (int)hashString[i]; } 

В PHP, когда вы отправляете букву как int, вы получаете 0 (int). Поскольку мы не можем себе представить, что это означает третья сторона, мы считаем, что C # делает что-то еще.

Ссылается ли C # на int 0 или, возможно, на char?

Во-вторых, оригинальный hashString имеет длину 320. Это означает, что код будет создавать int, длина которого составляет 320? В PHP у вас нет такой идеи резервирования памяти, как это делает C # здесь. Но когда мы пытаемся приписать 320 длинную строку в int, мы получаем int, который длится 19 'символов.

C # также создает более короткий int при типизации очень длинного «числа» в строке?

Вы конвертируете char в int . char – это код UTF-16 – неподписанное 16-битовое целое число (диапазон [0, 65535] ). Вы получаете это значение, в основном, расширенное до 32-разрядного целого числа со знаком. Так, например, 'A' достигает 65, а символ евро (U + 20AC) заканчивается как 8364 (0x20ac).

Что касается вашей второй части – вы создаете int , вы создаете массив int . Да, вы создадите массив из 320 элементов.

Строки C # – UTF16. Когда вы вводите символ UTF16 в int, он просто копирует 16-битное значение символа UTF16 в 32-битный int.

C # может передать символ в int и даст вам код символа. В приведенном выше коде берётся строка, hashString и превращается в массив целых чисел, keybuffer . C # способен обрабатывать строку, подобную массиву символов, используя синтаксис indexer [] . В приведенном выше коде будет создан массив ints, по одному на символ в хэш-строке, и каждый int будет символьным кодом соответствующего символа.

Чтобы развернуть сообщение Джона Скита, ваши «десятичные» целые значения будут сопоставляться с соответствующими значениями char, как в приведенной ниже таблице (которую я уже на протяжении многих лет использовал на своих компьютерах разработки).

Таким образом, приведение integer значения 0 в char возвращает NULL .

Таблица ASCII

РЕДАКТИРОВАТЬ: Если вы посмотрите на свой первоначальный вопрос, возможно, вам лучше будет служить пример MD5 вместо того, чтобы перевести строку в массив целых чисел.

Код фактически передал char (обычно ASCII) в int , а не «0» на 0. Поэтому, если исходная строка «d131dd02c5e6eec4», результирующий массив будет int [] {100, 49, 51, 49, 100, 100, 48, 50, 99, 53, 101, 54, 101, 101, 99, 52}.

Поэтому я предполагаю, что вам нужна функция ord в вашем PHP-скрипте.

РЕДАКТИРОВАТЬ:

Немного замечаний, приведение string к int в PHP может фактически отражать ее в int , а самые большие int PHP-дескрипторы – либо 32-разрядные, либо 64-разрядные, в зависимости от ОС, поэтому вы получаете длинный 19-символьный int, который – это максимум 64-битного int.

В C # существует другой тип переменной, называемый char , который представляет один символ Юникода и может быть введен непосредственно в целое число. Вы не можете наложить string в C # на int непосредственно на C #.

EDIT2: Я предполагаю, что ваш PHP-скрипт выглядит так:

 <?php $keyBuffer = new array(); for ($i=0; $i<strlen($hashString); $i++) { $keyBuffer[$i] = ord($hashString[i]); } ?>