繁体   English   中英

使用PHP解码16位的BASE64编码的带符号整数

[英]Use PHP to Decode BASE64 encoded Signed Integers in 16bit

我有一个Base64编码的字符串,并且正在使用以下c#代码对其进行解码。 里面应该是存储在16位中的一系列有符号整数。

现在,我需要在PHP中执行此操作,但确实遇到了麻烦。 有人可以帮忙吗?

基本上任何人都可以将此代码转换为php吗?

    private string decode(string encoded) 
    {
        Byte[] newBytes = Convert.FromBase64String(
            encoded.Replace("\n","")
        );

        int[] newArr = new int[newBytes.Length / 4];
        for (int ctr = 0; ctr < newBytes.Length / 4; ctr++)
            newArr[ctr] = BitConverter.ToInt16(newBytes, ctr * 4);

        return DisplayArray(newArr);
    }

    private string DisplayArray(Array arr)
    {
        string output = "";
        for (int ctr = 0; ctr < arr.GetUpperBound(0); ctr++)
        {
            output += arr.GetValue(ctr)  + ",";
        }

        return output;      
    }

这是base64字符串。

AgACAAAAAgAAAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAUABQAFAAUABQAF
AAUAAgACAAAA/v8AAAIABwAHAAUABQAFAAUAAAAAAAAAAgAAAAAAAgACAAUA
BQAFAAIAAgAFAAIAAAAAAAAAAAACAAAAAAACAAIAAAAAAAIABQAFAAUAAgAC
AAIAAgACAAIAAgACAAUAAgACAAIAAgACAAUABQAFAAIAAAAAAAUA/v8CAAIA
AgACAAAAAgAFAAUABQAFAAAAAgACAAIAAAACAAIABQACAAIABQAFAAcAAgAF
AAUAAgAAAAAAAgACAAUAAgACAAIAAAACAAUABQACAAUABQACAAIAAAACAAIA
AgACAAUABQAFAAAA/v/+/wAAAgACAAIAAAAAAAIAAgAAAAAAAgAFAAUABQAC
AAAAAAACAAIAAgACAAIAAAAAAAIAAAACAAIAAgACAAUAAgAFAAUABQACAAUA
BQAFAAcABQAFAAUABQAFAAUABQAHAAcABwAFAAUABwAHAAUABwAHAAUABwAH
AAUABwAHAAcABQAFAAUAAgAAAP7/AAACAAIAAgACAAUABQAFAAUAAgAFAAIA
BQACAAUABwAFAAIABQAFAAIABQACAAAABwAHAAUAAgAFAAUAAgAAAAAAAgAF
AAIABQAHAAcABQACAAIAAgACAAIAAgAFAAcABQAHAAcABwAHAAcABQAFAAUA
AgACAAUABQAFAAUABQAHAAoACgAKAAoABwAHAAoACgAKAAcACgAKAAwADAAM
AAwADAAPABEAEQAPAA8AFAARABQAFAAUABQAFgAWABEAEQAUABQAFAAWABYA
FgAZABsAGwAbABsAGwAbACAAIAAgACMAJQAoACUAKAAoACgAKAAoACgAKAAl
ACUAJQAlACUAJQAlACgAKgAqACgAJQAjACMAIAAeACAAIwAgABkAGQAZABkA
FAARAA8ADAAKAAcABwAFAAIABQAHAAcABQACAAIAAgACAAIAAAAAAAAA/v/+
/wAAAAAAAAIAAAD+//7/AAACAAUAAgACAAIAAAACAAUAAAAAAAAAAAAAAAAA
/v/+//7/AAAAAP7//v8AAAAA/v/+//7/+//7//v//v8AAAAA/v/7//7//v8A
AP7//v/7//7//v8AAP7/AAAAAAAAAAACAAIAAAAAAAAAAAAAAAIABQAHAAUA
BwAKAAoADwAUABsAIwAqAC8AOQBBAE0AWgBhAGkAcwB/AI4AmwClALEAuwDF
ANIA3gDrAPUABgEaASkBOAFKAV4BdAGGAZIBnwGuAb8BxwHRAdsB6gH2AQAC
BQIAAvkB6gHdAccBrgGVAYMBbQFUATgBGAH1ANwA1wDPAMoAyADAALQApwCb
AJMAiQCCAH0AcwBrAGYAXwBaAFIASwBGAEEAOQAvACUAHgAWABQAEQAMAAwA
DAAMAAwABwAFAAUAAgACAAAA/v8AAAAAAAD+//7/+//7//n/+f/2//b/+f/7
//n/+f/5//n/+//2//T/+//5//n/9v/5//n/9v/2//T/9v/0//n/+f/5//b/
9v/2//n/9v/2//T/9v/5//b/+f/5//n/+f/5//b/9P/2//T/7//x//T/9P/0
//b/9v/0//b/9P/2//b/9v/2//b/9P/x//H/8f/v//H/9P/x//T/9P/0//H/
8f/0//H/8f/x//H/8f/0//H/8f/x//H/8f/s/+z/7//v//H/8f/s/+z/7P/s
/+z/7P/s/+r/6v/s/+r/5//s/+r/6v/q/+r/6v/q/+f/5//n/+X/5f/n/+r/
6v/s/+f/5//l/+f/5//l/+L/5f/l/+X/5//i/+L/4v/i/+X/5f/i/+L/4P/d
/93/4v/i/+L/4v/g/93/3f/g/+D/3f/d/93/3f/b/93/2//b/9j/3f/b/9v/
2P/W/9j/1v/W/9P/0//R/9H/0//R/9b/1v/T/9H/0f/O/9P/0f/O/8z/zv/O
/87/zP/M/87/zP/M/8n/x//H/8f/zP/M/8z/yf/J/8z/zP/O/8z/yf/H/8T/
xP/H/8f/yf/J/8n/zP/M/8n/x//H/8n/yf/M/8z/zP/O/8z/zP/M/87/zv/R
/9H/0f/T/9P/0f/R/9P/1v/W/9j/3f/d/+D/4P/d/93/4v/i/+X/5//n/+z/
7//v/+//9P/2//b/9P/2//v/+//+/wAAAAACAAIABQAKAAoADAAMAAwACgAK
AAwADAAMAAwADAAMAA8AEQARABEAEQARABEADwARABQAFAARABEADwARABQA
EQARABEAEQAUABEAFAAUAA8AEQARAAwAEQARABEADwAPAAwADwARABEAEQAM
AAwACgAKAAoACgAKAAoACgAMAAwADAAKAAcACgAKAAwACgAFAAUACgAKAAoA
CgAKAAUABwAHAAcACgAHAAcABQAHAAUABwAKAAoABQACAAUABwAHAAcABQAC
AAIABQAFAAIAAgAFAAUACgAFAAUABwAHAAUABQAFAAIAAgACAAAAAgAFAAUA
BQAFAAcABwAFAAUABQAFAAcABwAHAAcABQAFAAUABQAFAAUABQAFAAUABQAH
AAcABQAFAAUABQAFAAIAAgACAAUABwAFAAUAAgACAAUABQAFAAUABQAKAAoA
BQAFAAcABwAFAAUABwACAAIAAgAHAAcABQAFAAUABQACAAAAAAAAAAIAAgAC
AAAAAAD+/wAAAAACAAIABQAFAAUABQACAAIAAgAAAAIAAgACAAAAAAACAAIA
AgAAAP7/AAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA
AAIAAgAAAAIAAAAAAAAAAAAAAAAAAgACAAAAAAACAAAAAAACAAAAAAACAAIA
AgACAAIAAgACAAIAAAAAAAAAAgACAAIAAgACAAIA/v8AAAIAAgACAAIABQAF
AAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIA
AgACAAIAAgACAAIAAgACAAUAAgACAAIAAgACAAIAAgACAAIAAgAFAAUAAgAA
AAAAAgACAAIAAgACAAIAAgACAAIAAgAFAAUAAgACAAIABQAFAAIAAgACAAAA
AgAFAAUABwAFAAIAAAACAAAA/v/7//7/AAAAAAIABwAHAAUAAgAAAAIABwAF
AAIAAgACAAIAAgACAAIA

它应该解码为...

2,0,0,2,2,2,2,2,2,5,5,5,2,0,0,7,5,5,0,0,0,2,5,5,2,2,0,0,0,2,0,2,5,2,2,2,2,5,2,2,5,5,0,5,2,2,0,5,5,0,2,0,2,2,5,7,5,2,0,2,2,2,2,5,5,2,0,2,2,5,0,-2,2,2,0,2,0,5,5,0,2,2,2,0,0,2,2,2,5,2,5,7,5,5,5,7,7,5,7,7,5,7,7,7,5,2,-2,2,2,5,5,2,2,2,7,2,5,5,0,7,2,5,0,2,2,7,5,2,2,2,7,7,7,7,5,2,5,5,5,10,10,7,10,10,10,12,12,12,17,15,20,20,20,22,17,20,20,22,25,27,27,27,32,35,40,40,40,40,40,37,37,37,40,42,37,35,30,35,25,25,20,15,10,7,2,7,5,2,2,0,0,-2,0,2,-2,0,5,2,0,5,0,0,0,-2,0,-2,0,-2,-2,-5,-2,0,-5,-2,-2, etc...

好的

PHP使读取base64数据并将其转换为带符号整数数组确实非常容易。 确保阅读解压缩功能,这很棒。

$stringValue = base64_decode($base64data, true);
$integers = unpack("s*", $stringValue);

不好

那不是您的C#代码正在做什么 将base64转换为原始字节后,它将以4个字节的块的形式处理该数据,将前2个解析为int16 并丢弃后两个字节 您一半的数据将耗尽。


丑陋的

如果C#代码确实是您所追求的算法,则以下是在PHP中的实现方法:

$stringValue = base64_decode($base64data, true);
$integers = unpack("s*", $stringValue);
// Throw away half of our data. Because... why not? :)
$integers = array_map('array_shift', array_chunk($integers, 2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM