将PHP chr()/ strval()函数转换为C ++

时间:2018-10-01 12:19:17

标签: php c++ code-translation

我正在尝试将字符处理库从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 ++?

2 个答案:

答案 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];

如果要解析十六进制字符串,则可以使用strtolhttp://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";
}