如何在 C++ 中对具有十六进制值的字符串执行按字节异或?
How to perform a byte-wise XOR of a string with a hex value in C++?
假设我有字符串
string str = "this is a string";
和一个十六进制值
int value = 0xbb;
我将如何在 C++ 中对字符串与十六进制值执行按字节异或?
只需遍历字符串并对每个字符进行异或:
for (size_t i = 0; i < str.size(); ++i)
str[i] ^= 0xbb;
或者在 C++11 及更高版本中可能更惯用:
for (char &c : str)
c ^= 0xbb;
另见 this question。
您可以使用 std::for_each
进行迭代,并应用 lambda 来执行操作。
std::for_each(str.begin(), str.end(), [](char &x){ x ^= 0xbb; });
或者仿函数:
struct { void operator()(char &x) { x ^= 0xbb; } } op;
std::for_each(str.begin(), str.end(), op);
有几种方法可以完成任务。例如
for ( char &c : str ) c ^= value;
或
for ( std::string::size_type i = 0; i < str.size(); i++ )
{
str[i] ^= value;
}
或
#include <algorithm>
//...
std::for_each( str.begin(), std::end(), [&]( char &c ) { c ^= value; } );
或
#include <algorithm>
#include <functional>
//...
std::transform( str.begin(), std.end(),
str.begin(),
std::bind2nd( std::bit_xor<char>(), value ) );
这是一个演示程序
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
int main()
{
std::string s( "this is a string" );
int value = 0xBB;
std::cout << s << std::endl;
for ( char &c : s ) c ^= value;
for ( std::string::size_type i = 0; i < s.size(); i++ )
{
s[i] ^= value;
}
std::cout << s << std::endl;
std::for_each( s.begin(), s.end(), [&]( char &c ) { c ^= value; } );
std::transform( s.begin(), s.end(),
s.begin(),
std::bind2nd( std::bit_xor<char>(), value ) );
std::cout << s << std::endl;
}
它的输出是
this is a string
this is a string
this is a string
假设我有字符串
string str = "this is a string";
和一个十六进制值
int value = 0xbb;
我将如何在 C++ 中对字符串与十六进制值执行按字节异或?
只需遍历字符串并对每个字符进行异或:
for (size_t i = 0; i < str.size(); ++i)
str[i] ^= 0xbb;
或者在 C++11 及更高版本中可能更惯用:
for (char &c : str)
c ^= 0xbb;
另见 this question。
您可以使用 std::for_each
进行迭代,并应用 lambda 来执行操作。
std::for_each(str.begin(), str.end(), [](char &x){ x ^= 0xbb; });
或者仿函数:
struct { void operator()(char &x) { x ^= 0xbb; } } op;
std::for_each(str.begin(), str.end(), op);
有几种方法可以完成任务。例如
for ( char &c : str ) c ^= value;
或
for ( std::string::size_type i = 0; i < str.size(); i++ )
{
str[i] ^= value;
}
或
#include <algorithm>
//...
std::for_each( str.begin(), std::end(), [&]( char &c ) { c ^= value; } );
或
#include <algorithm>
#include <functional>
//...
std::transform( str.begin(), std.end(),
str.begin(),
std::bind2nd( std::bit_xor<char>(), value ) );
这是一个演示程序
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
int main()
{
std::string s( "this is a string" );
int value = 0xBB;
std::cout << s << std::endl;
for ( char &c : s ) c ^= value;
for ( std::string::size_type i = 0; i < s.size(); i++ )
{
s[i] ^= value;
}
std::cout << s << std::endl;
std::for_each( s.begin(), s.end(), [&]( char &c ) { c ^= value; } );
std::transform( s.begin(), s.end(),
s.begin(),
std::bind2nd( std::bit_xor<char>(), value ) );
std::cout << s << std::endl;
}
它的输出是
this is a string
this is a string
this is a string