将 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";
}