使用PHP pack()函数,我已将字符串转换为二进制十六进制表示形式:
pack('H*', $SECURE_SECRET)
Run Code Online (Sandbox Code Playgroud)
如何在Python中获得相同的结果?我试过了struct.pack,但结果却不一样.
我有一个赋值,我必须将4个unsigned char中的字节打包成unsigned int.
代码如下:
#include <stdio.h>
int main (){
//Given this
unsigned char a = 202;
unsigned char b = 254;
unsigned char c = 186;
unsigned char d = 190;
//Did this myself
unsigned int u = a;
u <<=8;
u |= b;
u <<=8;
u |= c
u <<=8;
U |= d;
}
Run Code Online (Sandbox Code Playgroud)
我知道:
u <<=8;
Run Code Online (Sandbox Code Playgroud)
将你的位向左移动8.但我对这些线条的作用感到困惑u |= b;?
简单地说,我试图更好地理解我所编写的代码将4个unsigned char中的字节打包成unsigned int.我以粗野的方式提出了这个解决方案.我只是试图以不同的方式打包字节,这种方式有效.但我不确定为什么.
先感谢您.
我试图实现以下python代码并在Erlang中获得相同的结果:
struct.pack('Q', long(20000001))
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
从文档中unpack执行:
根据格式字符串对str(可能包含二进制数据)进行解码,并返回每个提取值的数组。
和"C"格式手段8-bit unsigned (unsigned char)。
但是,这实际上对我输入的字符串做了什么呢?结果是什么意思,如果我必须手动操作,我将如何去做呢?
我正在尝试使用位移操作将 5 个整数(每个最多 999 个)打包和解压缩为一个唯一的整数:
static UInt64 Combine(uint a, uint b, uint c, uint d, uint e)
{
return (a << 48) | (b << 32 ) | (c << 16) | (d << 8) | e;
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法解压该号码。任何人都可以指导我做错什么吗?谢谢。
我目前正在研究PE结构.我试图使用perl而不是C来解析它.
这不是一件重要的事情,但如果您阅读二进制文件,则必须跳转到某个部分.(例如,阅读e_lfanew)
我想读取0x78点的数据,这是由$ buf读取的,带有0x200数据.
以下是我认为在0x78处提取数据的两种方法.
my ($ dummy, $ data) = unpack ("A0x78 A*", $buf);
or
seek (F, 0x78,0); read F, $buf, 0x200; print ~
Run Code Online (Sandbox Code Playgroud)
我想知道这两种方法中的哪一种比减去虚拟数据和读取数据以及通过搜索读取新数据更有效.
我需要将以下perl函数转换为php:
pack("SSA12AC4L",
$id,
$loc,
$name,
'ar',
split(/\./, $get->getIP),
time+(60*60);
Run Code Online (Sandbox Code Playgroud)
我在PHP中使用以下代码(测试):
echo pack("SSA12AC4L",
'25',
'00001',
'2u7wx6fd94fd',
'f',
preg_split('/\./','10.2.1.1', -1, PREG_SPLIT_NO_EMPTY),
time()+(60*60));
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:警告:pack()[function.pack]:类型C:第8行的D:\ wamp\www\test.php中的参数太少
有什么建议?非常感谢.