我正在使用C++非托管项目.
我需要知道如何使用这样的字符串"一些数据加密"并得到一个byte []数组,我将用它作为加密的源.
在C#我做
for (int i = 0; i < text.Length; i++) buffer[i] = (byte)text[i];
我需要知道的是如何使用非托管C++.
谢谢!
如果您只需要只读访问权限,那么c_str()
将执行以下操作:
char const *c = myString.c_str();
如果需要读/写访问权限,则可以将字符串复制到向量中.矢量管理动态记忆.您不必混淆分配/解除分配:
std::vectorbytes(myString.begin(), myString.end()); bytes.push_back('\0'); char *c = &bytes[0];
std::string::data
似乎是足够和最有效的.如果你想要非常规内存来操作(加密很奇怪),你可以使用memcpy将数据复制到缓冲区:
unsigned char buffer[mystring.length()]; memcpy(buffer, mystring.data(), mystring.length());
STL粉丝会鼓励你使用std :: copy代替:
std::copy(mystring.begin(), mystring.end(), buffer);
但这确实没有太大的好处.如果你需要null终止使用std::string::c_str()
和其他人提供的各种字符串复制技术,但我通常会避免这种情况,只是查询length
.特别是对于密码学,你只知道有人会试图通过向其推送空值来破解它,并且使用std::string::data()
劝阻你懒洋洋地假设字符串中的底层位.