Ich bin mir sicher, dass dies zuvor gefragt wurde, aber ich muss einen Shift-Operator auf einem Byte-Array variabler Länge Größe implementieren. Ich habe mich ein bisschen umgeschaut, aber ich habe keinen Standard dafür gefunden. Ich habe eine Implementierung gefunden, die funktioniert, aber ich bin mir nicht sicher, wie effizient das ist. Kennt jemand eine Standardmethode zum Verschieben eines Arrays oder zumindest eine Empfehlung, wie die Leistung meiner Implementierung gesteigert werden kann?optimierte Byte-Array-Shifter
char* baLeftShift(const char* array, size_t size, signed int displacement,char* result)
{
memcpy(result,array,size);
short shiftBuffer = 0;
char carryFlag = 0;
char* byte;
if(displacement > 0)
{
for(;displacement--;)
{
for(byte=&(result[size - 1]);((unsigned int)(byte))>=((unsigned int)(result));byte--)
{
shiftBuffer = *byte;
shiftBuffer <<= 1;
*byte = ((carryFlag) | ((char)(shiftBuffer)));
carryFlag = ((char*)(&shiftBuffer))[1];
}
}
}
else
{
unsigned int offset = ((unsigned int)(result)) + size;
displacement = -displacement;
for(;displacement--;)
{
for(byte=(char*)result;((unsigned int)(byte)) < offset;byte++)
{
shiftBuffer = *byte;
shiftBuffer <<= 7;
*byte = ((carryFlag) | ((char*)(&shiftBuffer))[1]);
carryFlag = ((char)(shiftBuffer));
}
}
}
return result;
}
würde ich nicht immer noch eine Schleife benötigen, um die Bytes (Magnitude/8) -Adressen der linken Seite zuzuordnen, bevor Sie die letzte Bitverschiebung auf dem End-Byte tun? Oder verstehe ich etwas nicht, was du sagst? –