我有8个字段的字符串数组。每场8位给我64位内存在这种类型的单个字符串中。我想为这个字符串数组创建旋转函数。对于简单的字符串20
(十六进制)功能RotateLeft(string, 1)
给我40,就像在旋转。最大旋转值为64,则函数必须返回发送的字符串(RotateLeft(string, 64) == string
)。我需要左右旋转。我试图创建这样的东西:C++中的字符串旋转(按位旋转)
std::string RotateLeft(std::string Message, unsigned int Value){
std::string Output;
unsigned int MessageLength = Message.length(), Bit;
int FirstPointer, SecondPointer;
unsigned char Char;
for (int a = 0; a < MessageLength; a++){
FirstPointer = a - ceil(Value/8.);
if (FirstPointer < 0){
FirstPointer += MessageLength;
}
SecondPointer = (FirstPointer + 1) % MessageLength;
Bit = Value % 8;
Char = (Message[FirstPointer] << Bit) | (Message[SecondPointer] & (unsigned int)(pow(2, Bit) - 1));
Output += Char;
}
return Output;
}
它工作的价值64,但不适用于其他值。为了简单的HEX字符串(函数获取字符串元素作为十进制值,但它是为了更好的阅读)当我发送这个值:243F6A8885A308D3
并执行RotateLeft(string, 1)
我收到A6497ED4110B4611
。当我在Windows Calc中检查它时,它现在是有效值。任何人都可以帮助我,并显示我犯的错误?
难道我得到它的权利,你有存储为字符串十六进制数,你要旋转的十六进制值(而不是字符串中的实际字符)? – user463035818
@ tobi303不,十六进制值只能预览。我将这个值转换为十进制。 – ventaquil
然后我很困惑,因为'20'旋转的字符串不是'40'。 – user463035818