Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Два вопроса по синтаксису PHP / 19 сообщений из 19, страница 1 из 1
08.02.2016, 14:04
    #39165544
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
Вопрос простой
Почему код
Код: php
1.
2.
3.
4.
5.
$byte = fread($file,1);
if($byte == 0x43)
{
  ...
}


не срабатывает, а код
Код: php
1.
2.
3.
4.
5.
$byte = fread($file,1);
if($byte == 'C')
{
  ...
}



срабатывает, хотя С это 0x43.

Вопрос второй - как считать из файла тип LONG?
Если я делаю

Код: php
1.
$long = fread($file,4);


то байты идут в обратном порядке, так как они записаны в файле. А нужно наоборот.
...
Рейтинг: 0 / 0
08.02.2016, 15:21
    #39165652
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
автор С это 0x43.
var_dump($byte);
...
Рейтинг: 0 / 0
08.02.2016, 18:27
    #39165852
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
ScareCrow, спасибо!
...
Рейтинг: 0 / 0
08.02.2016, 18:48
    #39165871
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
А насчет чтения LONG?
...
Рейтинг: 0 / 0
08.02.2016, 19:16
    #39165912
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
ScareCrowавтор С это 0x43.
var_dump($byte);

так?
Код: php
1.
var_dump($byte) == 0x43


не работает!
...
Рейтинг: 0 / 0
08.02.2016, 21:40
    #39166022
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008,

SQL2008не работает!

Чего именно не делает?
...
Рейтинг: 0 / 0
09.02.2016, 07:24
    #39166176
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
MikkiMouseSQL2008,

SQL2008не работает!

Чего именно не делает?
Не сравнивает два значения.
Хотел бы привести значение байта к виду 0x43, а не к тексту 'C'.
...
Рейтинг: 0 / 0
09.02.2016, 08:00
    #39166182
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008,

if ( $byte == chr(0x43) )
...
Рейтинг: 0 / 0
09.02.2016, 08:32
    #39166195
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
r uSQL2008,

if ( $byte == chr(0x43) )
Короче ерунда. Ничем не лучше
Код: php
1.
if($byte == 'C')


А как быть, например с таким значением
Код: php
1.
if($byte == chr(0xFF))


К какому символу он будет приведен?

Вопрос про чтение LONG остается в силе.
...
Рейтинг: 0 / 0
09.02.2016, 08:49
    #39166202
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008Короче ерунда. Ничем не лучше
так а что нужно то?
0x43 это просто число 67. написанное в шестнадцатеричной форме. естественно что число неравно строковому символу.
0xFF это число 255.

про лонг. если нужно в обратном. так переверни. в чем проблема?
...
Рейтинг: 0 / 0
09.02.2016, 09:10
    #39166218
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
r uSQL2008Короче ерунда. Ничем не лучше
так а что нужно то?
0x43 это просто число 67. написанное в шестнадцатеричной форме. естественно что число неравно строковому символу.
0xFF это число 255.

в чем проблема?
И в самом деле проблема. Причем на ровном месте.
Также при операциях сравнения используется действительное значение, а не её представление символьное, десятичное и пр.
это все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
int byte = 0x43;

if(byte == 0x43) { ... }

if(byte == 67) { ... }

if(byte == 'C') { ... }



r u про лонг. если нужно в обратном. так переверни.
В С++ просто читаешь из файла в переменную определенного типа и не паришься с перевертыванием.
Даже боюсь представить как на PHP будет реализован такой алгоритм
Код: plaintext
1.
2.
3.
4.
DWORD src,dst;
src = 0x30000000;

dst = ((src>>24)&0x000000FF) | ((src>>8)&0x0000FF00) | ((src<<8)&0x00FF0000) | ((src<<24)&0xFF000000);


Подозреваю, что без pack(...) и unpack(...) не обойтись.
...
Рейтинг: 0 / 0
09.02.2016, 09:24
    #39166230
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008Даже боюсь представить как на PHP будет реализован такой алгоритм
да тоже самое
Код: php
1.
2.
$src = 0x30000000;
$dst = (($src>>24)&0x000000FF) | (($src>>8)&0x0000FF00) | (($src<<8)&0x00FF0000) | (($src<<24)&0xFF000000);
...
Рейтинг: 0 / 0
09.02.2016, 09:27
    #39166235
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
r u, ну слава богу! Хоть что-то привычное.
Спасибо и извини за эмоции.
...
Рейтинг: 0 / 0
09.02.2016, 09:33
    #39166237
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008это все работает
неправда
так не сработает:
Код: php
1.
2.
$byte = 0x43;
if($byte == 'C') {
...
Рейтинг: 0 / 0
09.02.2016, 10:24
    #39166276
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
r uSQL2008это все работает
неправда
так не сработает:
Код: php
1.
2.
$byte = 0x43;
if($byte == 'C') {



Я говорил про

Код: php
1.
2.
3.
4.
5.
$byte = fread($file,1);
if($byte == 0x43)
{
  ...
}



Где байт, считанный из файла равняется 0x43.
...
Рейтинг: 0 / 0
09.02.2016, 10:50
    #39166303
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
А ничего, что fread() возвращает строку, которую пытаетесь сравнить с числом без явных преобразований? Неявные преобразования не всегда работают как хочется.
...
Рейтинг: 0 / 0
09.02.2016, 13:44
    #39166591
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
vkleА ничего, что fread() возвращает строку, которую пытаетесь сравнить с числом без явных преобразований? Неявные преобразования не всегда работают как хочется.
Вот этого я как раз и не знал.
А есть функция чтения AS IS, без всяких преобразований?
...
Рейтинг: 0 / 0
09.02.2016, 14:04
    #39166619
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008,

Да читается то и так как есть (вот насчёт байта 00 не уверен). Трактуется прочитанное как строка. В некоторых случаях при использовании данных (сложение, например) строка может быть неявно преобразована в число. При необходимости можно явно преобразовать к другому типу данных . Хотите как число с числом сравнивать - преобразуйте прочитанную строку в число перед сравнением.
...
Рейтинг: 0 / 0
09.02.2016, 14:10
    #39166630
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вопроса по синтаксису PHP
SQL2008AS IS
нет такого типа данных. нужно определиться с тем что нужно и сделать необходимые преобразования.
и все.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Два вопроса по синтаксису PHP / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]