gpt4 book ai didi

c++ - 字符串 <-> 字节 [] 转换

转载 作者:行者123 更新时间:2023-11-28 06:04:37 27 4
gpt4 key购买 nike

我正在实现一个使用 libcrafter 的系统和 crypto++在网络上传输特定帧。但我遇到的问题根本不在这个级别。

它是关于这些库中使用的类型之间的转换。


1) 在发射处(已解决)

我正在尝试转换 Crafter::byte arraystd::string ,以便将此消息放入网络帧(作为 AES 加密/解密的初始化 vector )。

此外,iv必须归零,我无法正确初始化它(尽管答案是 herethere)。

编辑:要将其初始化为 00,我必须十六进制:0x30。并将其转换为 std::string我必须提供长度,即 ivLen2(感谢您的回答)。

这是我的做法:

const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x30, 0x30}; // crypto salt of 2 bytes at 0.

std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

string mess2send = ivStr + encrypted_message;

如果我用这个显示它们:

cout<<"iv[0] : "<<iv[0]<<endl;            // display 0
cout<<"mess2send : "<<mess2send<<endl; // display 00whatever

为什么我不简单地创建一个归零字符串并发送它?为了拥有通用函数和可重用代码。


2) 在接待处(待定)

毫不奇怪,我必须做相反的事情。我得到一个ivmessage串联在 vector<byte>* payload 中,我必须将 iv 提取为 byte array , 和 message在一个字符串中。

message这实际上不是问题,因为 std::string靠近vector .

这是我尝试检索 iv 的内容:

Crafter::byte iv[ ivLen2 ];
for (int i = 0; i < ivLen2; i++)
{
iv[i] = (byte)payload->at(i);
}
std::string iv_rcv( reinterpret_cast< char const* >(iv) ) ;

为了显示它们,我做了(在同一个循环中):

cout<<iv[i];

但它给了我一个非 ASCII 字符。

我也试过这个(根据 thisthis 回答):

Crafter::byte* iv;

std::string iv_rcv( payload->begin(), payload->begin()+ivLen2 ) ;
iv = (byte*)iv_rcv.c_str();

但它没有给我假定的初始化值...

有人知道吗?我的代码错了吗?

最佳答案

我认为这行不通:

const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x00, 0x00}; // crypto salt of 2 bytes

std::string ivStr( reinterpret_cast< char const* >(iv) ) ;

std::string 如何知道要从 iv 指针复制多少数据?

您必须使用一个构造函数来获取数据的长度,例如:

std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

仅指针 构造函数适用于以空字符 终止的特定编码字符串。除非您使用其中之一,否则您必须传递长度。

试试这个:

const int ivLen2 = 2;
std::string encrypted_message("whatever");

Crafter::byte iv[ivLen2]={0x00, 0x00}; // crypto salt of 2 bytes

std::string ivStr( reinterpret_cast< char const* >(iv), ivLen2 ) ;

std::string mess2send = ivStr + encrypted_message;

std::cout << (int)mess2send[0] << (int)mess2send[1] << mess2send.substr(2) << '\n';

关于c++ - 字符串 <-> 字节 [] 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com