我正在尝试将字符处理库从PHP转换为C ++。
1)我用static_cast<char>()
替换了所有单个chr()
函数(仅适用于单个char,即PHP: $out = chr(50); => C++: std::string s = static_cast<char>(50)
)。
这正确吗?
2)给出以下PHP代码:
$crypt = chr(strval(substr("5522446633",0,2)));
在此代码段中,我们从字符串“ 5522446633”中提取2个字符,并从函数strval()
中“获取其字符串值”(PHP manual)。
我知道如何在C ++中从一个字符获取(整数)值,但是我该如何处理两个字符?
如何将这段代码转换为C ++?
答案 0 :(得分:1)
首先请注意,在c ++中,字符串类型与字符类型非常不同。
字符类型表示为单个8位数字。
std :: string是用于表示字符串的类(有关详细信息,请参见http://www.cplusplus.com/reference/string/string/)。
因此,关于1-您的示例可能无法正常工作。 std :: string不接受单个字符作为构造函数。 您可以使用以下命令从数字创建长度为1的std :: string对象(使用上面参考中所述的fill构造函数):
char c = 50;
std::string s(1,c);
关于2,不确定要实现的目标,但是由于C字符串已经保存为字节整数数组,因此您可以尝试以下操作:
std:string s = "ABCD";
// char* s = "ABCD"; would work the same way in this case
int byte1 = s[0];
int byte2 = s[1];
如果要解析十六进制字符串,则可以使用strtol
(http://www.cplusplus.com/reference/cstdlib/strtol/)
答案 1 :(得分:1)
以下代码等效于您的php代码:
#include <iostream>
#include <string>
std::string convert(const std::string& value)
{
size_t pos;
try
{
std::string sub = value.substr(0,2);
int chr = std::stoi(sub, &pos);
if (pos != sub.size())
{
return "";
}
return std::string(1, static_cast<char>(chr & 255));
}
catch ( std::exception& )
{
return "";
}
}
int main()
{
std::cout << convert("5522446633") << "\n";
}