将 PHP chr()/strval() 函数转换为 C++
Convert PHP chr()/strval() function to C++
我正在尝试将字符操作库从 PHP 转换为 C++。
1) 我已经使用 static_cast<char>()
替换所有单个 chr()
函数(仅适用于单个字符,即:PHP: $out = chr(50); => C++: std::string s = static_cast<char>(50)
)。
这是正确的吗?
2) 给定以下 PHP 代码:
$crypt = chr(strval(substr("5522446633",0,2)));
在此代码段中,我们从字符串“5522446633”中提取 2 个字符,并从函数 strval()
.
中提取 "get their string values" (PHP manual)
我知道如何在 C++ 中从一个字符获取(整数)值,但我如何处理两个字符?
如何将此代码段翻译成 C++?
首先请注意,在 C++ 中,字符串类型与字符类型有很大不同。
字符类型表示为单个 8 位数字。
std::string是表示字符串的class(详见http://www.cplusplus.com/reference/string/string/)。
所以关于 1 - 你的例子可能行不通。 std::string 不接受单个字符作为构造函数。
您可以使用以下内容从数字创建一个长度为 1 的 std::string 对象(使用上面参考中描述的填充构造函数):
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/)
以下代码等同于您的 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";
}
我正在尝试将字符操作库从 PHP 转换为 C++。
1) 我已经使用 static_cast<char>()
替换所有单个 chr()
函数(仅适用于单个字符,即:PHP: $out = chr(50); => C++: std::string s = static_cast<char>(50)
)。
这是正确的吗?
2) 给定以下 PHP 代码:
$crypt = chr(strval(substr("5522446633",0,2)));
在此代码段中,我们从字符串“5522446633”中提取 2 个字符,并从函数 strval()
.
我知道如何在 C++ 中从一个字符获取(整数)值,但我如何处理两个字符?
如何将此代码段翻译成 C++?
首先请注意,在 C++ 中,字符串类型与字符类型有很大不同。
字符类型表示为单个 8 位数字。
std::string是表示字符串的class(详见http://www.cplusplus.com/reference/string/string/)。
所以关于 1 - 你的例子可能行不通。 std::string 不接受单个字符作为构造函数。 您可以使用以下内容从数字创建一个长度为 1 的 std::string 对象(使用上面参考中描述的填充构造函数):
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/)
以下代码等同于您的 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";
}