我正在使用一个我非常喜欢的课程:
#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 ++还不是很坚定,而且我害怕搞砸了。
有人可以告诉我我能做什么吗?
谢谢!
答案 0 :(得分:1)
你可以#include并使用uint8_t
,这是一个8位无符号整数,通常称为unsigned char
。
示例:
#include <cstdint>
typedef uint8_t BYTE;
答案 1 :(得分:1)
__int8
似乎是特定于Microsoft的关键字。 (这不是typedef
;如果是unsigned __int8
则会出现语法错误。)
定义byte
或BYTE
类型的合理方法是unsigned char
的typedef。或者您可以直接使用unsigned char
而不使用typedef
;任何C或C ++程序员都会将其识别为大小正好为1个字节的无符号类型。
您可以使用uint8_t
中定义的<cstdint>
,,如果您愿意承担CHAR_BIT == 8
,这是非常常见但不通用的。 (C和C ++中的“字节”是char
的大小,至少 8位但可以更多。)
我不知道unsigned char
和unsigned __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相同。
你可以做什么: