当前位置:  开发笔记 > 编程语言 > 正文

从C++中的std :: string获取字节

如何解决《从C++中的std::string获取字节》经验,为你挑选了2个好方法。

我正在使用C++非托管项目.

我需要知道如何使用这样的字符串"一些数据加密"并得到一个byte []数组,我将用它作为加密的源.

在C#我做

  for (int i = 0; i < text.Length; i++)
    buffer[i] = (byte)text[i];

我需要知道的是如何使用非托管C++.

谢谢!



1> Johannes Sch..:

如果您只需要只读访问权限,那么c_str()将执行以下操作:

char const *c = myString.c_str();

如果需要读/写访问权限,则可以将字符串复制到向量中.矢量管理动态记忆.您不必混淆分配/解除分配:

std::vector bytes(myString.begin(), myString.end());
bytes.push_back('\0');
char *c = &bytes[0];


假设它是连续的并不危险,它是向量的保证(在C++规范IIRC中std :: vector下的第一段).如果没有调用某些指定的函数,假设它不会改变是安全的 - 相当于那些可能引起resize()的函数.

2> Christopher ..:

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()劝阻你懒洋洋地假设字符串中的底层位.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有