C ++使用unsigned char而不是typedef unsigned __int8

时间:2013-10-11 15:48:58

标签: c++ class typedef encryption

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

#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 ++还不是很坚定,而且我害怕搞砸了。

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

谢谢!

3 个答案:

答案 0 :(得分:1)

你可以#include并使用uint8_t,这是一个8位无符号整数,通常称为unsigned char

示例:

#include <cstdint>
typedef uint8_t BYTE;

答案 1 :(得分:1)

__int8似乎是特定于Microsoft的关键字。 (这不是typedef;如果是unsigned __int8则会出现语法错误。)

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

您可以使用uint8_t中定义的<cstdint>,如果您愿意承担CHAR_BIT == 8,这是非常常见但不通用的。 (C和C ++中的“字节”是char的大小,至少 8位但可以更多。)

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

在对Matthias247's answer的评论中,您写道:

  

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

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

答案 2 :(得分:0)

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

你可以做什么:

  1. 将所有出现的BYTE替换为unsigned char(这对您的代码是安全的)
  2. 创建一个CXorcipher类的模板化版本,该版本适用于不同的数据类型。