Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP chr()/strval()函数转换为C++;_Php_C++_Code Translation - Fatal编程技术网

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

将PHP chr()/strval()函数转换为C++;,php,c++,code-translation,Php,C++,Code Translation,我试图把字符操作库从PHP转换成C++。 1) 我使用了static_cast()来替换所有单个chr()函数(仅应用于单个字符,即:PHP:$out=chr(50);=>C++:std::string s=static_cast(50)) 这是正确的吗 2) 给定以下PHP代码: $crypt = chr(strval(substr("5522446633",0,2))); 在这个代码段中,我们从字符串“5522446633”中提取2个字符,并从函数strval()中“获取它们的字符串值”(

我试图把字符操作库从PHP转换成C++。 1) 我使用了
static_cast()
来替换所有单个
chr()
函数(仅应用于单个字符,即:
PHP:$out=chr(50);=>C++:std::string s=static_cast(50)

这是正确的吗

2) 给定以下PHP代码:

$crypt = chr(strval(substr("5522446633",0,2)));
在这个代码段中,我们从字符串“5522446633”中提取2个字符,并从函数
strval()
中“获取它们的字符串值”()

<>我知道如何从C++中的一个字符中获得(整数)值,但是我怎么处理两个字符呢?
<>我如何将这个代码段翻译成C++?<请注意,C++中的字符串类型与字符类型有很大的不同。

字符类型表示为单个8位数字

string是一个表示字符串的类(有关详细信息,请参阅)

关于1,你的例子可能不起作用。string不接受单个字符作为构造函数。 您可以使用以下方法从一个数字中创建一个长度为1的std::string对象(使用上述参考中描述的填充构造函数):

关于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> /Cuff>()

< P>。首先注意,C++字符串类型与字符类型非常不同。 字符类型表示为单个8位数字

string是一个表示字符串的类(有关详细信息,请参阅)

关于1,你的例子可能不起作用。string不接受单个字符作为构造函数。 您可以使用以下方法从一个数字中创建一个长度为1的std::string对象(使用上述参考中描述的填充构造函数):

关于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
()

以下代码相当于您的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";
}
#包括
#包括
标准::字符串转换(常量标准::字符串和值)
{
尺寸和位置;
尝试
{
std::string sub=value.substr(0,2);
int chr=std::stoi(分接头和位置);
如果(位置=子尺寸())
{
返回“”;
}
返回标准::字符串(1,静态_转换(chr&255));
}
捕获(标准::异常&)
{
返回“”;
}
}
int main()
{

std::cout以下代码相当于您的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";
}
#包括
#包括
标准::字符串转换(常量标准::字符串和值)
{
尺寸和位置;
尝试
{
std::string sub=value.substr(0,2);
int chr=std::stoi(分接头和位置);
如果(位置=子尺寸())
{
返回“”;
}
返回标准::字符串(1,静态_转换(chr&255));
}
捕获(标准::异常&)
{
返回“”;
}
}
int main()
{

STD::所有问题都可以通过打开C++书来解释,说明如何使用<代码> STD::String 。<代码> STD::String 还有一个非常类似的函数,以及PHP的<>代码>在这方面是完全没有意义的。最接近的类比是 STD::String 的构造器。C++不是PHP,它的基本工作方式与PHP不同。如果你试图将它等同于PHP,你只能自己理解C++。请自己帮个忙,完全忘记你所说的一切。如果你真的想精通C++,请原谅,先生,我的C++书告诉我STATICE-CAST,STD::String和Waver的行为,如果我的解释/翻译在这方面是正确的,我没有问我是否必须忘记PHP的所有内容,我只指出我不理解。关于SrValf(“AB”)返回值的文档,以及如何用C++做同样的事情:它的ASCII值是“B”的ASCII值,“MSB上的‘A’的ASCII值和‘LSB’上的‘B’的ASCII值,ASCII‘A’模,什么?”一个简单的谷歌搜索“PHP Struv”立即找到了“StruVar()”的完整解释。这肯定比坐在stackoverflow.com上等待别人响应要快得多。strval只是简单地将一些任意PHP变量转换成字符串,正如我耐心地解释的,这就是
std::string
的许多构造函数通常所做的。在某些情况下,可能是一个格式化的输出操作符一个是C++的等价物。没有直接的翻译,一个用数字表示的等价于C++的PHP中的东西。它们是根本不同的。<代码> CHR(“ab”)< /C> >产生一个空的输出,作为“ab”。不是一个有效的数字。你确定这是你要转换的PHP代码吗?@是的,在PHP脚本的注释中,它说“代码>两个字符的转换字符< /COD>。这个代码取自GS1-128条形码生成器。所有的问题都可以通过打开C++书来解释解释如何使用<代码> STD::ST的章节。ring也有一个非常类似的
substr()
函数和PHP的
strval()在这方面是完全没有意义的。最接近的类比是 STD::String 的构造器。C++不是PHP,它的基本工作方式与PHP不同。如果你试图将它等同于PHP,你只能自己理解C++。请自己帮个忙,完全忘记你所说的一切。如果你真的想精通C++,请原谅,先生,但是我的C++书告诉我STATICESTASE,STD::字符串和WHOVER的行为,如果我的解释/翻译在这方面是正确的,我就不问我是否必须这么做。