gpt4 book ai didi

c++ - 使用带有 vector 的静态字符串

转载 作者:行者123 更新时间:2023-11-27 23:31:45 25 4
gpt4 key购买 nike

我的编程历史是在 C 和 CPython 中。请耐心等待。

为了帮助我学习 C++,我正在将我的一个旧 C 程序转换为使用 C++ OOP,但它并没有按照我希望的方式工作。我不在乎速度。我只关心学习。

这是我想放入校验和类的旧 C 代码:

    //This is the standard CRC32 implementation
//"rollingChecksum" is used so the caller can maintain the current
//checksum between function calls
unsigned int CalculateChecksum(unsigned char* eachBlock, int* sbox, long lengthOfBlock, unsigned int rollingChecksum)
{
int IndexLookup;
int blockPos;

for(blockPos = 0; blockPos < lengthOfBlock; blockPos++)
{
IndexLookup = (rollingChecksum >> 0x18) ^ eachBlock[blockPos];
rollingChecksum = (rollingChecksum << 0x08) ^ sbox[IndexLookup];
}
return rollingChecksum;
}

下面是我将其翻译成更多 C++ 代码的方法:

 void Checksum::UpdateStream(std::vector<unsigned char> binaryData)
{
unsigned int indexLookup;
unsigned int blockPos;

for(blockPos = 0; blockPos < binaryData.size(); blockPos++)
{
indexLookup = (this->checksum >> 0x18) ^ binaryData[blockPos];
this->checksum = (this->checksum << 0x08) ^ this->sbox[indexLookup];
}
}

但是当我尝试使用它时:

int main(int argc, char* argv[])
{
Checksum Test;
Test.UpdateStream("foo bar foobar");
std::cout << Test.getChecksum() << std::endl;
}

我收到这个错误:

1>main.cpp(7) : error C2664: 'Checksum::UpdateStream' : cannot convert parameter 1 from 'const char [15]' to 'std::vector<_Ty>'
1> with
1> [
1> _Ty=unsigned char
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous

由于 how this question turned out on StackOverflow,我决定使用上面的 vector 容器而不是字符串类并且因为我想在这里使用二进制数据。

期望的结果:如何将字符串和二进制数据传递给此方法以计算其校验和?我需要重载它还是在 main 中对字符串进行类型转换?我完全迷路了。

最佳答案

您可以使用 std::copychar 数组内容复制到 vector 中:

std::vector< char > vector;
char str[] = "foo bar foobar";
vector.resize( sizeof(str)-1 ); // thanks to Alf (see comments)
std::copy( str, str+sizeof(str)-1, vector.begin() );

或者甚至更好地使用 std::vector 构造函数:

char str[] = "foo bar foobar";
std::vector< char > vector( str, str+sizeof(str)-1 );

请注意,此代码将复制整个字符串终止\0(同样,请参阅注释了解更多详细信息)。

关于c++ - 使用带有 vector 的静态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com