Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: системы счисления

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, меня интересует такой вопрос, какая разница между 0x55, 55 и \x55?
Через функцию chr() в PHP можно узнать, что это символ 'U'.
Но что означает \x55?
0x55, 55 и \x55 - это всё одно и то-же?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 18:53 01-04-2017 | Исправлено: Sutar, 18:53 01-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
0x55, 55 и \x55 - это всё одно и то-же?

Первое и последнее - да, это 85 в шестнадцатеричном исчислении. Второе - десятичное 55 и не может быть U

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 19:25 01-04-2017 | Исправлено: Mavrikii, 19:25 01-04-2017
moroka33



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго.
Может кто из грамотных в математике разъяснит гуманитарию где собака порылась?:
   
Понимаю, что туфта, но где и в чем объяснить не могу...
Добавлено:
Mavrikii

Цитата:
если один из множителей равен нулю, то сокращать его нельзя

Вот, теперь понятно. Благодарю.

Цитата:
разделом не ошиблись?

Название топика:

Цитата:
системы счисления

в глаза бросилось, решил поинтересоваться, чтобы разъяснили по быстрому...)
Еще раз благодарствую.

----------
Возрожденный батвой

Всего записей: 4273 | Зарегистр. 31-07-2009 | Отправлено: 20:28 01-04-2017 | Исправлено: moroka33, 20:37 01-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
moroka33

Цитата:
Понимаю, что туфта

разделом не ошиблись?
Глупые вопросы VI
http://forum.ru-board.com/forum.cgi?action=filter&forum=29&filterby=topictitle&word=%EC%E0%F2%E5
 

Цитата:
но где и в чем объяснить не могу

если один из множителей равен нулю, то сокращать его нельзя. хотя бы потому, что сокращение подразумевает деление на этот множитель правой и левой частей, а делить на ноль...

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 20:31 01-04-2017
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
Первое и последнее - да, это 85 в шестнадцатеричном исчислении.

Я так понимаю каждый записывает как хочет? Есть к примеру такое:
\x6E \x6e 0x6E 0x6e
Большие и маленькие буквы так-же ничего не влияют?
 
И второе, если попробовать преобразовать hex в bin, то 1 и 2 запись выдает ошибку: Invalid hexadecimal value
Напрашивается вопрос, зачем тогда делать такую запись?
 
Третье, символ U это бинарные (двоичные) значение? И любые символы (буквы) тоже есть двоичными?
 

Код:
bin2hex('U') // 55
hex2bin('55') // U

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 16:31 02-04-2017 | Исправлено: Sutar, 16:39 02-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
Откройте любой учебник по программированию, не важно на каком языке, ибо у вас такая мешанина в голове. Начните с основ - что такое биты, как из них составляются байты и тд и тп.  
 

Цитата:
Я так понимаю каждый записывает как хочет?

Всего лишь разное представление
 

Цитата:
Большие и маленькие буквы так-же ничего не влияют?

Нет, так как шестнадцетиричное счисление - то 0 до F
 

Цитата:
И второе, если попробовать преобразовать hex в bin, то 1 и 2 запись выдает ошибку: Invalid hexadecimal value  
Напрашивается вопрос, зачем тогда делать такую запись?  

А вы мануале читать вообще пробуете? Там и примеры есть. Функции hex2bin не нужно указывать счисление (именно это указывают 0x или \x) - она "верит" вам и считает, что все ее аргументы - в hex представлении. Это очевидно уже просто из примеров.
 

Цитата:
Третье, символ U это бинарные (двоичные) значение? И любые символы (буквы) тоже есть двоичными?  

https://habrahabr.ru/post/158639/

Цитата:
bin2hex('U') // 55  

Функция возвращает только  hex, поэтому нет смысла указывать 0x

Цитата:
hex2bin('55') // U

На входе только строка с hex, поэтому - аналогично.
 
PS: и обратите особое внимание на предостережение
http://php.net/manual/ru/function.hex2bin.php
 

Цитата:
И любые символы (буквы) тоже есть двоичными?

Для машины - все в двоичном, остальное - для удобства.  
01010101
0x55
85
Это одно и тоже число, являющееся кодом символа U

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 16:56 02-04-2017 | Исправлено: Mavrikii, 17:15 02-04-2017
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Понятно.
Такой вот вопрос, функцию chr('0x55') возвращает символ U, а вот ord('U') возвращает 85.
Почему ord + U = 85 а chr + 85 != U? Но зато chr + 55 = U
Я читал про эти функции на php.net
 

Код:
ord() — Возвращает ASCII-код символа
chr() - Возвращает символ по его коду

 
а какая тогда функция вернет символ по ASCII коду?
И ещё одно, получается что

Код:
hex2bin('55') = chr('0x55')

Получается что chr() тоже преобразовывает hex в bin только с обязательным 0x (с \x не работает)? Зачем две одинаковые функции?
 
Добавлено:

Цитата:
Это одно и тоже число, являющееся кодом символа U

1 - двоичное
2 - шестнадцатеричное
3 - ASCII код?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 17:14 02-04-2017 | Исправлено: Sutar, 17:15 02-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Такой вот вопрос, функцию chr('0x55') возвращает символ U, а вот ord('U') возвращает 85.  

0x55 и есть 85 в десятичном
 

Цитата:
а какая тогда функция вернет символ по ASCII коду?  

chr и возвращает, я выше дописывал

Цитата:
01010101  
0x55  
85  
Это одно и тоже число, являющееся кодом символа U

 

Цитата:
3 - ASCII код?

Десятеричная запись

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 17:19 02-04-2017 | Исправлено: Mavrikii, 17:21 02-04-2017
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
0x55 и есть 85 в десятичном  

Получается что для функции chr() нужно 16-ричное значение
а ord() выдает нам 10-ричное.
 
Подобные преобразования применяют для сжатия данных при передаче например клиент-сервер (любой случай)?
Можно-ли как-то измерять объем данных?
Например, если клиент будет передавать серверу символ U или число 85 или 0х55, объем данных будет изменяться как-то?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 17:47 02-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Получается что для функции chr() нужно 16-ричное значение  
а ord() выдает нам 10-ричное.  

Открываем мануал, читаем описание функций - там все написано!!
Не нужно chr hex, ну как мне вам на пальцах объяснить, что это одно и то же число, лишь записанное в разном виде. Если вы укажите 85 или 0x55, то она поймет, так как 0x "подсказывает" в каком счисление запись.
chr(85) и chr('0x55') - одно и то же
 

Цитата:
Например, если клиент будет передавать серверу символ U или число 85 или 0х55, объем данных будет изменяться как-то?

Если передавать в виде строк - будет больше. То есть запись '0x55', как строка, занимает 4 байта, хотя само число - один байт. Ну тут особенность языка, который не знает об иной записи hex, кроме как в строке.

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 17:57 02-04-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: системы счисления


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru