0 / 0 / 0
Регистрация: 19.01.2010
Сообщений: 62
1

Какой-то парадокс с pack на php

12.03.2010, 14:47. Показов 1693. Ответов 4
Метки нет (Все метки)

Эти коды все время возвращают нули
PHP
1
2
3
4
<?php
$w='B0';
echo pack("v",0x.$w);
?>
PHP
1
2
3
4
<?php
$w='B0';
echo pack("v",'0x'.$w);
?>
PHP
1
2
3
4
<?php
$w='B0';
echo pack("v",0x.$w);
?>
PHP
1
2
3
4
<?php
$w='B0';
echo pack("v","0x$w");
?>
PHP
1
2
3
4
<?php
$w='0xB0';
echo pack("v",$w);
?>
PHP
1
2
3
4
<?php
$w='0xB0';
echo pack("v",$w);
?>
а этот возвращает нужный символ
PHP
1
2
3
<?php
echo pack("v",0xB0);
?>
Не могу понять в чем дело((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2010, 14:47
Ответы с готовыми решениями:

PosEx Парадокс какой-то
Вот имеется проц-ра; procedure TForm1.SecondAlgor(var S:String); var i:Integer; begin for i:=1...

Парадокс определения существования файла средствами PHP
Добрый день! Столкнулся с парадоксом. (CentOS &amp; PHP) В корне сайта (public_root), PHP успешно...

Аналог PHP-функций pack/unpack
Здравствуйте. Необходима помощь с написанием аналога функций pack/unpack с PHP на C# pack —...

Аналог функции pack(H*, $data)php на С#
Здравствуйте, уважаемые пользователи портала. Существует ли аналог функции pack(H*,'1234') из php...

4
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
12.03.2010, 19:13 2
Цитата Сообщение от Eggman Посмотреть сообщение
Не могу понять в чем дело(
походу не только ты

Добавлено через 44 секунды
попробуй в переменную $w записывать без кавычек
1
13207 / 6595 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.03.2010, 19:20 3
0x - ошибка синтаксиса
0xB0 - целое число в шеснданцатиричной форме
'0xB0' - тупо-строка из 4 символов

А чего Вы хотите добиться этим кодом?
0
Почетный модератор
11306 / 4274 / 439
Регистрация: 12.06.2008
Сообщений: 12,313
12.03.2010, 19:24 4
Если указано 'v', значит число должно быть 16-ричным. Например, можно
PHP
1
pack('v',0xb0b0);
0
0 / 0 / 0
Регистрация: 19.01.2010
Сообщений: 62
13.03.2010, 10:44  [ТС] 5
Программу хотел сделать.ПРинцип действия:рисуешь к примеру в пейнте белым карандашом на черном фоне вертикально волну,программа открывает получившийся рисунок,сконирует по порядку
каждую строку пикселей и постепенно формирует звуковой файл,который уже будет воспроизводиться,в принципе все готово,только в спецификации wav-файлов междду 56 и 60 символом должен находиться размер данных представленный Ansi-сиволами,и между 4 и 8сиволом должен находиться полный размер файла минус восемь байт.Вот код программ:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
#Высота 229;Ширина 1205 Цвет черный
set_time_limit(100);
$y=1;
$x=1;
$string='';
$cvet=pack("v*",0xFFFF);
$cvet2=pack("v*",0xFF);
$cvet=$cvet.SUBSTR($cvet2,0,1);
#ECHO $cvet;
// Получаем содержимое файла
$fp=fopen('muzika.bmp',"r");
$content=fread($fp,filesize('muzika.bmp'));
fclose($fp);
// Вывод содержимого файла
#print($content);
//
$gr=strrev(substr($content,18,4));
$gr=hexdec(bin2hex($gr));
//
echo 'Гориз.разм='.$gr.'|';
$vr=strrev(substr($content,22,4));
$vr=hexdec(bin2hex($vr));
echo 'Вертик.разм='.$vr.'|';
$co=substr($content,54);
while (strlen($co)>0){
if(($x-1)==$gr){
$os=4-(($gr*3)%4);
#echo $os;
$co=substr($co,$os);
$y++;
$x=1;
};
$p[$y][$x]=substr($co,0,3);
if ($p[$y][$x]==$cvet)
{
$hexzv=round($x/$gr*256);
$hexzv=dechex($hexzv);
if(strlen($hexzv)==1){$hexzv='0'.$hexzv;};
$hexzv=$hexzv;
 
$hey=pack("n*",$hexzv);
$hey=substr($hey,1,1);
$string=$string.$hey;
//x-это высота звука
 
};
$co=substr($co,3);
#echo $co;
$x++;
};
$fp=fopen("sablon.wav","r");
$content=fread($fp,filesize("sablon.wav"));
fclose($fp);
#unlink ("muzika.wav");
$f=fopen("muzika.wav","w");
$dlin=dechex(strlen($string));
 
if(strlen($dlin)==2){$dlin='00'.$dlin;};
if(strlen($dlin)==3){$dlin='0'.$dlin;};
if(strlen($dlin)==1){$dlin='000'.$dlin;};
#strrev
echo $dlin;
echo strlen($dlin);
$dlin=$dlin;
$dlin2=substr($dlin,2,2);
echo $dlin2;
$hey2=pack("v*",$dlin2);
echo $hey2;
$content=substr($content,0,56).$hey2.substr($content,58);
fwrite($f,$content.$string);
fclose($f);
?>
Самое удивительное верхний pack работает как надо.Не приложу ума где кроется загадка.

Добавлено через 4 минуты
Цитата Сообщение от Humanoid Посмотреть сообщение
Если указано 'v', значит число должно быть 16-ричным. Например, можно
PHP
1
pack('v',0xb0b0);
Дело в том что это-то работает,как и в самом первом посту передал,все глюки начинаются с передачи pack переменных

Добавлено через 4 минуты
Цитата Сообщение от romchiksoad Посмотреть сообщение
походу не только ты

Добавлено через 44 секунды
попробуй в переменную $w записывать без кавычек
Точно то что нужно,огромное спасибо,оказывается данные можно и без кавычек писать))))
Только вот,как мне это реализовать на коде,изначально же у меня не строка кода а переменная,единственныей выход который я вижу это eval

Добавлено через 7 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
#Высота 229;Ширина 1205 Цвет черный
set_time_limit(100);
$y=1;
$x=1;
$string='';
$cvet=pack("v*",0xFFFF);
$cvet2=pack("v*",0xFF);
$cvet=$cvet.SUBSTR($cvet2,0,1);
#ECHO $cvet;
// Получаем содержимое файла
$fp=fopen('muzika.bmp',"r");
$content=fread($fp,filesize('muzika.bmp'));
fclose($fp);
// Вывод содержимого файла
#print($content);
//
$gr=strrev(substr($content,18,4));
$gr=hexdec(bin2hex($gr));
//
echo 'Гориз.разм='.$gr.'|';
$vr=strrev(substr($content,22,4));
$vr=hexdec(bin2hex($vr));
echo 'Вертик.разм='.$vr.'|';
$co=substr($content,54);
while (strlen($co)>0){
if(($x-1)==$gr){
$os=4-(($gr*3)%4);
#echo $os;
$co=substr($co,$os);
$y++;
$x=1;
};
$p[$y][$x]=substr($co,0,3);
if ($p[$y][$x]==$cvet)
{
$hexzv=round($x/$gr*256);
$hexzv=dechex($hexzv);
if(strlen($hexzv)==1){$hexzv='0'.$hexzv;};
$hexzv=$hexzv;
 
$hey=pack("n*",$hexzv);
$hey=substr($hey,1,1);
$string=$string.$hey;
//x-это высота звука
 
};
$co=substr($co,3);
#echo $co;
$x++;
};
$fp=fopen("sablon.wav","r");
$content=fread($fp,filesize("sablon.wav"));
fclose($fp);
#unlink ("muzika.wav");
$f=fopen("muzika.wav","w");
$dlin=dechex(strlen($string));
 
if(strlen($dlin)==2){$dlin='00'.$dlin;};
if(strlen($dlin)==3){$dlin='0'.$dlin;};
if(strlen($dlin)==1){$dlin='000'.$dlin;};
#strrev
echo $dlin;
eval ("\$hey2=pack(\"v*\",0x$dlin);");
echo $hey2;
$content=substr($content,0,56).$hey2.substr($content,58);
fwrite($f,$content.$string);
fclose($f);
?>
Всё отлично работает!)) Правда код несколько громоздкий где while,может как-то можно оптимизировать?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2010, 10:44
Помогаю со студенческими работами здесь

Аналог pack/unpuck из Python и PHP
Чем в C++ можно распаковывать бинарные данные в int/short/double? В питоне и пхп для этого есть...

Русские символы NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251
Помогите пожалуйста!!!!!! имею NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251 Выполняю...

Pack() [function.pack]: Type H: illegal hex digit m in
Возникла довольно странная проблема, при загрузке страницы вылезает Warning: pack() : Type H:...

Использование #pragma pack(push,1)... pack(pop)
Добрый день, товарищи. Задался вопросом о записи в файл структур данных, читал читал в интернете...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru