繁体   English   中英

如何在 c++ 中填充和取消填充 std::string?

[英]How to pad and unpad std::string in c++?

我正在尝试在 VS2019 中实现以下功能:

  1. 从命令 window 中读取数据作为字符串
  2. 将数据填充到 128 字节。
  3. 使用 OpenSSL 加密数据(我知道 OpenSSL 自己应用填充,但由于我的模拟器的结构,在开始加密之前我需要额外的填充。因为我的系统只适用于固定长度的数据,我不想进行更改在那个部分。)
  4. 通过 IP 隧道为接收器发送数据。
  5. 接收方将解密数据,然后取消填充数据。

除了我不知道如何填充和取消填充之外,所有步骤都已完成。 感谢您的宝贵意见。

以下是我的一些代码:

bool LoadFromCommandWindow::runBlock(void) {

std::cout << "Enter your message: ";
std::getline(std::cin, plainData);

if (plainData.length() == 0) return false;


for (auto k : outputSignals)  // This part saves the data into buffer and then sent for Rx
{
    k->bufferPut((std::byte*) &plainData, plainData.length());
}

return true;

}

更新:对于填充,我发现了这个 function:

void padTo(std::string& str, const size_t num, const char paddingChar = '\0') 
if (num > str.size())
str.insert(str.size(), num - str.size(), paddingChar);

现在我怎样才能在 Rx 端取消它?

这是填充和取消填充std::string的方法。

inline void padTo(std::string& str, size_t num, char paddingChar = '\0') {
    str.append(num - str.length() % num, paddingChar);
}

inline void unpad(std::string& str, char paddingChar = '\0') {
    size_t n = str.length();
    while (n != 0 && str[n-1] == paddingChar)
        n--;
    str.resize(n);
}

请注意\0字符在打印时是不可见的。 调试时使用不同的字符。

\0应该足以填充文本消息。 对于填充二进制数据,一种流行的算法是PKCS#7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM