如何编码 PHP 中的字节数组
How to encode array of bytes in PHP
我正在尝试使用 C++ 和 ACE 对 PHP 中的字节数组进行编码,并将其解码为字节数组 (ACE_Byte* = unsigned char*),但到目前为止没有成功。我的猜测是 PHP 中的编码效果不佳,因为解码简单明了:
我尝试了下面的编码但没有成功。
谁能帮我找到一个好的编码方式?
/// Encoding in PHP
public function EncodeArray(){
$myArray = array();
$myArray[0] = 'A';
$myArray[1] = 'B';
$myArray[2] = 'C';
$myArray[3] = 15;
$myArray[4] = 250;
//First try
$serialized = serialize($myArray);
$mySerializedString = base64_encode($serialized);
return $mySerializedString;
//Second try
$imploded = implode($myArray);
$myImplodedString = base64_encode($imploded);
return $myImplodedString;
//Third try
$packed = pack('C*',$myArray);
$myPackedString = base64_encode ($packed);
return $myPackedString;
}
///Decoding in C++ using ACE library
bool DecodeString(std::string& myString)
{
size_t uiLength;
const ACE_Byte* p_myArray = ACE_Base64::decode((const ACE_Byte*)myString.c_str(),&uiLength);
if(p_myArray == NULL)
{
return false;
}
return true;
}
我找到了解决办法。
正如@VolkerK 提到的那样(谢谢!)- 使用字符串而不是字符。
另外,pack的使用应该有所不同:
/// Encoding in PHP
public function EncodeArray(){
$myArray = array();
$myArray[0] = ord('A'); //or a number, like: 0x40;
$myArray[1] = ord('B');
$myArray[2] = ord('C');
$myArray[3] = 15;
$myArray[4] = 250;
$Length = 5;
for($i = 0; $i < $Length; $i++)
{
//concat the string
$myPackedString = $myPackedString . pack('C',$myArray[$i]);
}
$myPackedString = base64_encode ($myPackedString);
return $myPackedString;
}
我正在尝试使用 C++ 和 ACE 对 PHP 中的字节数组进行编码,并将其解码为字节数组 (ACE_Byte* = unsigned char*),但到目前为止没有成功。我的猜测是 PHP 中的编码效果不佳,因为解码简单明了: 我尝试了下面的编码但没有成功。 谁能帮我找到一个好的编码方式?
/// Encoding in PHP
public function EncodeArray(){
$myArray = array();
$myArray[0] = 'A';
$myArray[1] = 'B';
$myArray[2] = 'C';
$myArray[3] = 15;
$myArray[4] = 250;
//First try
$serialized = serialize($myArray);
$mySerializedString = base64_encode($serialized);
return $mySerializedString;
//Second try
$imploded = implode($myArray);
$myImplodedString = base64_encode($imploded);
return $myImplodedString;
//Third try
$packed = pack('C*',$myArray);
$myPackedString = base64_encode ($packed);
return $myPackedString;
}
///Decoding in C++ using ACE library
bool DecodeString(std::string& myString)
{
size_t uiLength;
const ACE_Byte* p_myArray = ACE_Base64::decode((const ACE_Byte*)myString.c_str(),&uiLength);
if(p_myArray == NULL)
{
return false;
}
return true;
}
我找到了解决办法。 正如@VolkerK 提到的那样(谢谢!)- 使用字符串而不是字符。 另外,pack的使用应该有所不同:
/// Encoding in PHP
public function EncodeArray(){
$myArray = array();
$myArray[0] = ord('A'); //or a number, like: 0x40;
$myArray[1] = ord('B');
$myArray[2] = ord('C');
$myArray[3] = 15;
$myArray[4] = 250;
$Length = 5;
for($i = 0; $i < $Length; $i++)
{
//concat the string
$myPackedString = $myPackedString . pack('C',$myArray[$i]);
}
$myPackedString = base64_encode ($myPackedString);
return $myPackedString;
}