Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;“没有合适的转换函数”;常量二进制缓冲区“;至;int*”;_C++_Binary_Key_Type Conversion - Fatal编程技术网

C++ c++;“没有合适的转换函数”;常量二进制缓冲区“;至;int*”;

C++ c++;“没有合适的转换函数”;常量二进制缓冲区“;至;int*”;,c++,binary,key,type-conversion,C++,Binary,Key,Type Conversion,如何修复此问题以编译它? 我有3个文件,我真的需要帮助 我希望你能这样做,因为我已经尝试了我所知道的一切:( 档案: Encrypt.cpp #include "Encrypt.h" #include <algorithm> #include <iterator> #pragma intrinsic(_rotl8, _rotr8) constexpr auto xorKeyLocation = 0; constexpr auto numberOfBitsToRota

如何修复此问题以编译它?
我有3个文件,我真的需要帮助

我希望你能这样做,因为我已经尝试了我所知道的一切:(

档案:


Encrypt.cpp

#include "Encrypt.h"
#include <algorithm>
#include <iterator>

#pragma intrinsic(_rotl8, _rotr8)

constexpr auto xorKeyLocation = 0;
constexpr auto numberOfBitsToRotateLocation = 1;

int* Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key)
{
    const auto xorKey = key[xorKeyLocation];
    const auto numberOfBitsToRotate = key[numberOfBitsToRotateLocation];
    const BinaryBuffer result;

    do
    {
        std::transform(
            plainText.begin(),
            plainText.end(),
            std::back_inserter(result),
            [&](const auto byte)
        {
            const auto xored = byte ^ xorKey;
            const auto shifted = _rotl8(xored, numberOfBitsToRotate);

            return shifted;
        });
    } while (0);

    return result;
}

char* Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key)
{
    const auto xorKey = key[xorKeyLocation];
    const auto numberOfBitsToRotate = key[(std::vector<int>)numberOfBitsToRotateLocation];
    const BinaryBuffer result;

    std::transform(
        cipherText.cbegin(),
        cipherText.cend(),
        std::back_inserter(result),
        [&](const double byte)
    {
        const auto shifted = _rotr8(byte, numberOfBitsToRotate);
        const auto xored = shifted ^ xorKey;
        return xored;
    });

    return result;
}

公共卫生:

#pragma once

#include <vector>

using BinaryBuffer = std::vector<unsigned char>;
using EncryptionKey = BinaryBuffer;
#pragma一次
#包括
使用BinaryBuffer=std::vector;
使用EncryptionKey=BinaryBuffer;
有人能帮我吗?
谢谢:)

Encrypt.h
中转发这些声明:

BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);
Encrypt.cpp
中的实现不匹配。它们被前向声明为返回
BinaryBuffer
,但实现分别返回
int*
char*
(这将触发另一个编译时错误,因为您不能重载返回类型)。所以当您尝试
返回结果时,编译器推断您希望将本地
BinaryBuffer
对象转换为这些类型的指针,并且没有可用的隐式转换运算符

Encrypt.cpp
中函数的返回类型更改为
BinaryBuffer



旁注,
result
变量不应声明为
const
。您可以通过
std::back\u inserter()
间接修改它们,这将导致另一个编译错误。

您尝试了什么?他们又犯了什么错误?祝“沙巴尼克”好运。。试着自己解决挑战-1因为你试图欺骗……你真的不应该发表那篇文章,请尊重我们,嗯?欺骗你什么意思?@t银行为什么不呢?:太多了!我甚至不知道我为什么这么做!!:D但是,在Encrypt.cpp的第37行“const auto numberOfBitsToRotate=key[(std::vector)numberOfBitsToRotateLocation];”中仍然存在一个问题;我收到错误“no operator”[]”匹配这些操作数:const EncryptionKey[std::vector]“。。。你能帮我整理一下吗?@AnonymousUser整个表达毫无意义
numberOfBitsToRotateLocation
的类型为
int
,但您要将其强制转换为
std::vector
,然后尝试使用它来索引
std::vector
。将
int
转换为
std::vector
是毫无意义的,尝试用另一个向量索引一个向量也是如此。我不确定你需要做什么来修复它,因为我不确定它首先应该做什么。我知道,我被赋予了修复它并使其编译的任务。。。如果你能帮助我,我将非常感激@匿名用户“使其编译”和“使其正确工作”是两个不同的目标。我可以帮助第一个,但不太可能有效地帮助第二个。请帮助我完成第一个:)
BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);