字符到 ASCII 代码转换并返回字符
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
,反之亦然。
不,您有一个会阻止编译的错误。
charArray=tempChar;
应该是:
charArray.at(i) = tempChar;
一旦修复,您的代码片段(假设它构成了更广泛,格式良好的程序的一部分)本身就是格式良好的,并且可以执行我只能猜测您希望它做的事情。
您可以使用标准副本。
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());
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- std::stringstream 返回字符 *
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 为什么我的字符* 复印机返回不同的东西?
- strcmp 对于相等的字符序列返回 false
- 如何在数组中返回负字符?
- 为什么当作为常量字符* 返回时会在此处创建临时字符串?[斯特劳斯特鲁普的书例]
- isalpha() 函数为字符串中的字符返回 false
- 使用 const 指针的 C 样式字符返回不正确的结果
- 字符返回函数指针C++
- 'isprint' 为 Solaris 上的不可打印字符返回 true
- 常量字符* 返回类型
- C++字符返回输出符号
- 无符号字符返回值和+=出现问题
- _带有_O_U8TEXT标志的wsopen_s,向缓冲区、中间字符和4个中间俄语字符返回0.VS2010
- 将常量字符* 返回到字符*,然后更改数据