【发布时间】:2016-02-25 05:58:57
【问题描述】:
我正在尝试在 PHP 中对字节数组进行编码,并使用 C++ 和 ACE 将其解码为字节数组 (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;
}
【问题讨论】:
-
与 php 中的 C 'A' 不同,它不表示字符/字节,而是表示字符串。同样重新调整 $myArray[4]=250,当您将 $myArray 传递给任何将元素视为字符串的东西时 - 比如 implode() - 250 将被转换为字符串
250,而不是单个字节。 implode() 有两个参数;在您的情况下,第一个应该是''- 一个空字符串。
标签: php c++ arrays base64 encode