-1

我正在使用一个我非常喜欢的课程:

#pragma once
#include "StdAfx.h"
#include "xorcipher.h"
#include <vector>

using namespace std;

typedef unsigned __int8 BYTE;

    vector<BYTE>m_Key;

    CXORcipher::CXORcipher()
    {   
        m_Key.push_back(0x55);
        m_Key.push_back(0xae);
        m_Key.push_back(0x8c);
        m_Key.push_back(0x14);
    }
    CXORcipher::~CXORcipher()
    {
    }

    vector<BYTE> xor_encryptdecrypt(const vector<BYTE>&uInput)
    {
        vector<BYTE> ret;
        ret.reserve(uInput.size());

        vector<BYTE>::const_iterator keyIterator = m_Key.begin();

        for(vector<BYTE>::const_iterator inputIterator = uInput.begin(); inputIterator != uInput.end(); ++ inputIterator)
        {
            ret.push_back(*inputIterator ^ *keyIterator);

            // advance the key iterator, wrapping to begin.
            if(++ keyIterator == m_Key.end())
            {
                keyIterator = m_Key.begin();
            }
        }
        return ret;
    }

但是,我想提供一个 unsigned char 向量而不是 typedef。我对 C++ 还不是很坚定,我害怕把事情搞砸。

有人能告诉我我能做什么吗?

谢谢!

4

3 回答 3

2

You could #include and use uint8_t, which is an 8-bit unsigned integer, commonly referred to as unsigned char.

Example:

#include <cstdint>
typedef uint8_t BYTE;
于 2013-10-11T16:09:09.120 回答
1

__int8似乎是 Microsoft 特定的关键字。(这不是typedef; 如果是,那unsigned __int8将是语法错误。)

定义 a byteorBYTE类型的合理方法是将unsigned char. 或者您可以直接使用unsigned char而不使用typedef; 任何 C 或 C++ 程序员都会将其识别为大小正好为 1 个字节的无符号类型。

如果您愿意假设,您可以使用uint8_t, 定义在 中<cstdint>,这很常见但并不普遍。(C 和 C++ 中的“字节”是 a 的大小,至少8 位,但可以更多。)CHAR_BIT == 8char

我不知道unsigned char和是否unsigned __int8是同一类型,但我怀疑它们是。无论如何,使用__int8会使您的代码不可移植。(如果您不需要将它移植到非 Microsoft 平台,这不一定是一个致命的缺陷,但更多的人可以使用标准 C++ 来帮助您,而不是使用 Microsoft 特定的 C++。)

在评论Matthias247 的回答时,您写道:

不幸的是,简单的替换对我不起作用。有问题的行是这一行:for(vector<unsigned char>::const_iterator inputIterator = uInput.begin(); inputIterator != uInput.end(); ++ inputIterator)我没有任何迭代器 unsigned char

请更新您的问题,添加显示问题的代码和确切的错误消息。(不要删除现有代码,因为您已经有了引用它的答案。)

于 2013-10-11T18:48:46.127 回答
0

我认为当你传递一个向量时它会立即出现,因为 BYTE 是通过定义为 __int8 的 typedef,在我看来它与 unsigned char 相同。

否则你可以做什么:

  1. 将所有出现的 BYTE 替换为 unsigned char (这对您的代码是安全的)
  2. 创建 CXORcipher 类的模板化版本,它适用于不同的数据类型。
于 2013-10-11T15:54:55.997 回答