php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #33649 unpack returns strange values
Submitted: 2005-07-11 22:52 UTC Modified: 2005-07-11 22:59 UTC
From: raduc at 2software dot ro Assigned:
Status: Not a bug Package: *Programming Data Structures
PHP Version: 4.3.10 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: raduc at 2software dot ro
New email:
PHP Version: OS:

 

 [2005-07-11 22:52 UTC] raduc at 2software dot ro
Description:
------------
Hi,

I have a really strange behaviour with unpack() function and i didn't found any bug / issue like this one.
The result of unpack() is diff. on a spcific server (my client's new hosting company).
I tested the script on Win and Linux and everything works fine, with the same .dbf file (the file is not corrupted).

Please help.

Many thanks,
Radu

Reproduce code:
---------------
$data = fread ($fp, 32) or die ("Could not read data from file <i>$file</i>");
$header_format = 'H2id/' . 'CYear/' . 'CMonth/' . 'CDay/' . 'L# of Records/' . 'SHeader Size/' . 'SRecord Size';
$header = unpack ($header_format, $data);


Expected result:
----------------
Array ( [id] => 03 [Year] => 105 [Month] => 7 [Day] => 2 [# of Records] => 2713 [Header Size] => 129 [Record Size] => 58 ) 


Actual result:
--------------
Array ( [id] => 03 [Year] => 105 [Month] => 7 [Day] => 2 [# of Records] => 2713 [Header Size] => 33024 [Record Size] => 14848 )

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-07-11 22:57 UTC] derick@php.net
Doesn't seem to be a bug, the difference is endianness:

33024 in hex = 0x8100
  129 in hex = 0x0081

14848 in hex = 0x3A00
   58 in hex = 0x003A
 [2005-07-11 22:59 UTC] derick@php.net
See at http://no.php.net/manual/en/function.pack.php:

S	unsigned short (always 16 bit, machine byte order)
n	unsigned short (always 16 bit, big endian byte order)
v	unsigned short (always 16 bit, little endian byte order)

You need either n or v...
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 16:01:28 2024 UTC