Char 到 ascii 码转换并返回到 char
Char to ascii code conversion and back to char
我有一个小问题:
我有:
std::vector<char> charArray(7);
std::vector<int> intArray(7);
int tempInt;
char tempChar;
是否合适:
for(int i=0; i<charArray.size();i++)
{
tempInt= static_cast<int>(charArray.at(i));
intArray.at(i)=tempInt;
}
// some operations with elemets of intArray
// Like intArray.at(0) = intArray.at(1)^intArray.at(2);
// next back conversion to chars
for(int i=0;i<7;i++)
{
tempChar=static_cast<char>(intArray.at(i));
// Thanks to
charArray.at(i)=tempChar;
}
对吗?或者我应该使用一些其他功能?
static_cast<>
非常适合将 char
转换为 int
并且 反之亦然.
您可以为此使用标准副本。
std::copy(intArray.begin(), intArray.end(), charArray.begin());
不幸的是,编译器可能会警告您正在从较大的数据类型隐式转换为较小的数据类型。我们可以通过使用标准转换和转换函子来解决这个问题。
template<class Out_T, class In_T>
inline Out_T Convert(const In_T& x)
{
return static_cast<Out_T>(x);
}
...
std::transform(intArray.begin(), intArray.end(), charArray.begin(), Convert<decltype(charArray)::value_type, decltype(intArray)::value_type>);
这看起来很难看,所以让我们把它包装在一个函数中。
template<class Input_Itr, class Output_Itr>
void ConvertRange(Input_Itr in, Input_Itr in_end, Output_Itr out)
{
std::transform(in, in_end, out, Convert<typename std::iterator_traits<Output_Itr>::value_type, typename std::iterator_traits<Input_Itr>::value_type>);
}
现在您可以简单地调用您的代码:
ConvertRange(intArray.begin(), intArray.end(), charArray.end());
不,您有一个会阻止编译的错误。
charArray=tempChar;
应该是:
charArray.at(i) = tempChar;
修复后,您的代码片段(假设它构成了更广泛、格式正确的程序的一部分)本身格式正确,并且可以执行我只能猜测您希望它执行的操作。
我有一个小问题: 我有:
std::vector<char> charArray(7);
std::vector<int> intArray(7);
int tempInt;
char tempChar;
是否合适:
for(int i=0; i<charArray.size();i++)
{
tempInt= static_cast<int>(charArray.at(i));
intArray.at(i)=tempInt;
}
// some operations with elemets of intArray
// Like intArray.at(0) = intArray.at(1)^intArray.at(2);
// next back conversion to chars
for(int i=0;i<7;i++)
{
tempChar=static_cast<char>(intArray.at(i));
// Thanks to
charArray.at(i)=tempChar;
}
对吗?或者我应该使用一些其他功能?
static_cast<>
非常适合将 char
转换为 int
并且 反之亦然.
您可以为此使用标准副本。
std::copy(intArray.begin(), intArray.end(), charArray.begin());
不幸的是,编译器可能会警告您正在从较大的数据类型隐式转换为较小的数据类型。我们可以通过使用标准转换和转换函子来解决这个问题。
template<class Out_T, class In_T>
inline Out_T Convert(const In_T& x)
{
return static_cast<Out_T>(x);
}
...
std::transform(intArray.begin(), intArray.end(), charArray.begin(), Convert<decltype(charArray)::value_type, decltype(intArray)::value_type>);
这看起来很难看,所以让我们把它包装在一个函数中。
template<class Input_Itr, class Output_Itr>
void ConvertRange(Input_Itr in, Input_Itr in_end, Output_Itr out)
{
std::transform(in, in_end, out, Convert<typename std::iterator_traits<Output_Itr>::value_type, typename std::iterator_traits<Input_Itr>::value_type>);
}
现在您可以简单地调用您的代码:
ConvertRange(intArray.begin(), intArray.end(), charArray.end());
不,您有一个会阻止编译的错误。
charArray=tempChar;
应该是:
charArray.at(i) = tempChar;
修复后,您的代码片段(假设它构成了更广泛、格式正确的程序的一部分)本身格式正确,并且可以执行我只能猜测您希望它执行的操作。