Table of Contents
回复讨论(解决方案)
Home Backend Development PHP Tutorial unpack怎么接收 unsigned long long类型

unpack怎么接收 unsigned long long类型

Jun 23, 2016 pm 02:09 PM

服务器是小端模式, 发送过来前8个字节是 unsigned long long 类型的数据, 我怎么用unpack来读出来呢?
unpack("Q8md5/a10end_str", $recv_body); 这个不行 多谢


回复讨论(解决方案)

拆开两个32位unpack,反正是整型,又不是浮点
直接返回还要看系统会否溢出呢

另外你上面写的都不符合unpack语法

啊 那怎么写呢 能帮我写出来试一下么 多谢

Code Description 
a NUL-padded string 
A SPACE-padded string 
h Hex string, low nibble first 
H Hex string, high nibble first 
c signed char 
C unsigned char 
s signed short (always 16 bit, machine byte order) 
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) 
i signed integer (machine dependent size and byte order) 
I unsigned integer (machine dependent size and byte order) 
l signed long (always 32 bit, machine byte order) 
L unsigned long (always 32 bit, machine byte order) 
N unsigned long (always 32 bit, big endian byte order) 
V unsigned long (always 32 bit, little endian byte order) 
f float (machine dependent size and representation) 
d double (machine dependent size and representation) 
x NUL byte 
X Back up one byte 
@ NUL-fill to absolute position 

没有 Q

那我那个该怎么写呢 能帮我改 一下么? 谢谢

我来猜猜你想干什么
unpack("Q8md5/a10end_str", $recv_body)
应写作
unpack("Qmd5/a10end_str", $recv_body)
虽然32位的php不支持64位整数,但规则还是要的
Q8 表示 8 个64位整数,显然是不合题意的

既然是命名为 md5,那么也可以不作为整数来看待
$a = unpack("amd5/a10end_str", $recv_body);
$a['md5'] 不就是你要的结果吗

不对, amd5只是解出了头一个字节...

这个md5是我自己随便写的, 实际是一个 unsigned long long的数值, 这个类型的数值该怎么解出来呢?

你最好贴出 base64_encode($recv_body) 的结果
有了样例数据才好讨论

??????ALLDATAEND
前8个字节是个8位数字, 后面是文本ALLDATAEND;
unpack("Nn1/a10end_str", $recv_body);
用这个解, n1是负数 -1935870548
正确的应该是441051427183631500才对


 echo base64_encode($recv_body);
贴出结果

用了原始数据,我才能准确的告诉你该怎么写

recv_body is ====>jJz1rO/tHgZBTExEQVRBRU5E
是这个 麻烦了

$s = base64_decode('jJz1rO/tHgZBTExEQVRBRU5E');$t = unpack('a8n/a10end_str', $s);$t['n'] = rmul($t['n']);print_r($t);function rmul($w) {  $n = 0;  foreach(array_reverse(unpack('v4', $w)) as $v) $n = bcadd(bcmul($n, 65536), $v);  return $n;}
Copy after login
Array
(
    [n] => 441051427183631500
    [end_str] => ALLDATAEND
)

非常感谢 好复杂呀 呵呵 unpack本身不能解码这么长的数字么?

php 都是是 32 位编译器编译的,所以没法处理 64 位的整数
如果你用 64 位编译器编译时,就可支持 64 位整数了
当然 Q 和 q 模式也就可以用了,也就简单了

好的 多谢了 呵呵

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

11 Best PHP URL Shortener Scripts (Free and Premium) 11 Best PHP URL Shortener Scripts (Free and Premium) Mar 03, 2025 am 10:49 AM

11 Best PHP URL Shortener Scripts (Free and Premium)

Introduction to the Instagram API Introduction to the Instagram API Mar 02, 2025 am 09:32 AM

Introduction to the Instagram API

Working with Flash Session Data in Laravel Working with Flash Session Data in Laravel Mar 12, 2025 pm 05:08 PM

Working with Flash Session Data in Laravel

Build a React App With a Laravel Back End: Part 2, React Build a React App With a Laravel Back End: Part 2, React Mar 04, 2025 am 09:33 AM

Build a React App With a Laravel Back End: Part 2, React

Simplified HTTP Response Mocking in Laravel Tests Simplified HTTP Response Mocking in Laravel Tests Mar 12, 2025 pm 05:09 PM

Simplified HTTP Response Mocking in Laravel Tests

cURL in PHP: How to Use the PHP cURL Extension in REST APIs cURL in PHP: How to Use the PHP cURL Extension in REST APIs Mar 14, 2025 am 11:42 AM

cURL in PHP: How to Use the PHP cURL Extension in REST APIs

12 Best PHP Chat Scripts on CodeCanyon 12 Best PHP Chat Scripts on CodeCanyon Mar 13, 2025 pm 12:08 PM

12 Best PHP Chat Scripts on CodeCanyon

Notifications in Laravel Notifications in Laravel Mar 04, 2025 am 09:22 AM

Notifications in Laravel

See all articles