Конвертировать PHP chr () / strval () функцию в 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)));

В этом фрагменте мы извлекаем 2 символа из строки «5522446633» и «получаем их строковые значения» (Руководство по PHP) из функции strval(),

Я знаю, как получить (целое) значение из одного символа в C ++, но как я могу сделать с двумя символами?

Как я могу перевести этот фрагмент на C ++?

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

Другие решения

Прежде всего обратите внимание, что в c ++ строковый тип сильно отличается от символьного типа.

Тип символа представлен одним 8-битным числом.

std :: string — это класс для представления строки (см. http://www.cplusplus.com/reference/string/string/ для деталей).

Что касается 1 — ваш пример, вероятно, не сработает. std :: string не принимает один символ в качестве конструктора.
Вы можете использовать следующее для создания объекта 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/)

1