我的目标是得到这个:
BYTE Data1[] = {0x6b,0x65,0x79};
BYTE Data2[] = {0x6D,0x65,0x73,0x73,0x61,0x67,0x65};
但我的出发点是:
std::string msg = "message";
std::string key = "key";
我无法从std::string
转到BYTE[]
。
我尝试了以下内容:
std::vector<BYTE> msgbytebuffer(msg.begin(), msg.end());
BYTE* Data1 = &msgbytebuffer[0];
这没有导致编译或运行时错误。但是,最终结果(我将其提供给winapi函数 - crypto api)与我在最顶层({0x6D,0x65,0x73,0x73,0x61,0x67,0x65}
)中使用实际字节数组时的结果不同。
答案 0 :(得分:2)
您可以使用string::c_str()
函数返回指向c样式字符串的指针,该字符串可以传递给winapi函数,如:
foo(string.c_str());
它实际上做的是它返回一个指向包含以null结尾的字符序列的数组的指针。
我认为BYTE []实际上是一个char数组。您可以通过执行以下操作将std :: string分配给char数组:
std::string str = "hello";
BYTE byte[6]; // null terminated string;
strcpy(byte, str.c_str()); // copy from str to byte[]
如果要复制末尾没有0的str,请改为使用strncpy
:
BYTE byte[5];
strncpy(byte, str.c_str(), str.length());
答案 1 :(得分:1)
似乎winapi正在等待一个空终止的c-string。您可以使用以下方法实现:
msg.c_str();
或使用您的BYTE
类型,类似:
std::vector<BYTE> msgbytebuffer(msg.length() + 1, 0);
std::copy(msg.begin(), msg.end(), msgbytebuffer.begin());