繁体   English   中英

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

[英]Convert PHP chr()/strval() function to C++

我正在尝试将字符处理库从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手册 strval()

我知道如何从C ++中的一个字符中获取(整数)值,但是我该如何处理两个字符?

如何将该代码段转换为C ++?

首先请注意,在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/

以下代码等效于您的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";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM