PHP:Base64解码,将字符串转换为十进制或二进制等其他格式
我正在尝试使用一个“base64转换”数据的服务,然后将数据推送到我的服务器。数据分为三种数据类型:字符串、整数和布尔值。我不明白他们为什么用这种方式包装,但要由我来破译它 我有一个字符串PHP:Base64解码,将字符串转换为十进制或二进制等其他格式,php,base64,converter,Php,Base64,Converter,我正在尝试使用一个“base64转换”数据的服务,然后将数据推送到我的服务器。数据分为三种数据类型:字符串、整数和布尔值。我不明白他们为什么用这种方式包装,但要由我来破译它 我有一个字符串Qjo0MDk2,它应该转换成B:4096,PHP的原生base64_decode函数可以工作 但是,如果我尝试将AAATmg==转换为一个以10为基数(十进制)的整数值,我想得到5018,但是base64\u decode没有给我任何结果。(我假设是因为它试图转换为字符串,而不是以10为基数的整数。) 同样地
Qjo0MDk2
,它应该转换成B:4096
,PHP的原生base64_decode
函数可以工作
但是,如果我尝试将AAATmg==
转换为一个以10为基数(十进制)的整数值,我想得到5018
,但是base64\u decode
没有给我任何结果。(我假设是因为它试图转换为字符串,而不是以10为基数的整数。)
同样地,AA==
应转换为base-2(二进制)布尔值中的0
,而AQ==
应转换为1
是否有一组函数已经在某个地方实现了这一点?我无法想象这是新的。现在有一个网站这样做了,但是代码没有公开:二进制数据不能简单地打印出来,这就是为什么你在
base64\u decode
中看不到一些东西,但是数据在那里。如果您想实际看到某些内容,则需要将数据转换为十六进制(从技术上讲是十六进制表示)。因为看起来第三方应用程序正在这样做(尽管方向相反),所以您必须对所有数据都这样做
在if
语句中使用AA=
和AQ==
的数据表示形式时是相同的,即使它们是00
和01
十六进制。它们对PHP来说是true
-ish,因此执行if
部分。如果确实要检查它们的状态,则必须将它们转换为int
(从十六进制表示)
尝试直接从二进制转换为
int
,将导致int(0)
。因此,在处理来自第三方应用程序的数据时必须谨慎。二进制数据不能简单地打印,这就是为什么在base64\u decode
中看不到某些内容,但数据在那里。如果您想实际看到某些内容,则需要将数据转换为十六进制(从技术上讲是十六进制表示)。因为看起来第三方应用程序正在这样做(尽管方向相反),所以您必须对所有数据都这样做
在if
语句中使用AA=
和AQ==
的数据表示形式时是相同的,即使它们是00
和01
十六进制。它们对PHP来说是true
-ish,因此执行if
部分。如果确实要检查它们的状态,则必须将它们转换为int
(从十六进制表示)
尝试直接从二进制转换为
int
,将导致int(0)
。因此,在处理来自第三方应用程序的数据时,您必须谨慎。base64\u decode
确实为您提供了一些东西,但它是二进制的,因此如果您转储它,它只是一个字符,没有实际字符(=带有问号的符号)。有一些函数可以将二进制转换为十进制(和十六进制),测试表明,如果我尝试bindec
,就会得到0
。如果我先使用十六进制hexdec(bin2hex(base64_decode(…)))
,它实际上是有效的。请注意,5018
的编码值似乎是NTAxOA===
而不是AAATmg=
@CharlotteDunois,它适用于十进制/整数,谢谢!但是为什么这对二进制文件不起作用呢?当AA==
应该给出0
并且AQ==
应该给出1
时,它总是打印true。代码:if(base64_解码(“AA=”)回显“true”;否则回声“假”代码>原因如下:@CharlotteDunois非常感谢您!好几天来我一直在用我的头来对付这件事!如果你作为答案提交,我会很高兴地接受它。base64\u decode
确实给了你一些东西,但它是二进制的,所以如果你转储它,它只是一个字符,没有实际的字符(=带有问号的符号)。有一些函数可以将二进制转换为十进制(和十六进制),测试表明,如果我尝试bindec
,就会得到0
。如果我先使用十六进制hexdec(bin2hex(base64_decode(…)))
,它实际上是有效的。请注意,5018
的编码值似乎是NTAxOA===
而不是AAATmg=
@CharlotteDunois,它适用于十进制/整数,谢谢!但是为什么这对二进制文件不起作用呢?当AA==
应该给出0
并且AQ==
应该给出1
时,它总是打印true。代码:if(base64_解码(“AA=”)回显“true”;否则回声“假”代码>原因如下:@CharlotteDunois非常感谢您!好几天来我一直在用我的头来对付这件事!如果你提交答案,我会欣然接受。
(int) bin2hex(base64_decode("AA==")) // int(0)
(int) bin2hex(base64_decode("AQ==")) // int(1)