Cast int als byte-array in C++
Ich versuche, mit Umsetzung der LSB-lookup-Methode vorgeschlagen, die von Andrew Grant eine Antwort auf diese Frage: Position des least significant bit, das gesetzt ist
Ist es jedoch, was in einem segmentation fault. Hier ist ein kleines Programm demonstriert das problem:
#include <iostream>
typedef unsigned char Byte;
int main()
{
int value = 300;
Byte* byteArray = (Byte*)value;
if (byteArray[0] > 0)
{
std::cout<< "This line is never reached. Trying to access the array index results in a seg-fault." << std::endl;
}
return 0;
}
Was mache ich falsch?
Ich habe gelesen, dass es nicht gute Praxis für die Verwendung von 'C-Format' - casts in C++. Sollte ich reinterpret_cast<Byte*>(value)
statt? Dies führt immer noch zu einem segmentation fault, aber.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden:
Wollen Sie nicht einen Zeiger auf Adresse 300, Sie wollen einen Zeiger auf, wo 300 gespeichert ist. So verwenden Sie die-Adresse-der Betreiber
&
um die Adresse zu bekommen vonvalue
.Während Erik antwortete Ihre Allgemeine Frage, wie eine Nachfolge würde ich mit Nachdruck sagen-ja, das ist
reinterpret_cast
sollte verwendet werden, eher als ein C-style cast.Die Zeile sollte sein:
Byte* byteArray = (Byte*)&Wert;
Sollten Sie nicht haben, um die (void *) vor.
-Chert
Im Grunde nehmen Sie einen Zeiger auf den Anfang der Zeichenkette und Neufassung es einem Zeiger auf ein byte.
@Erik schon fest Ihre primäre problem, sondern es ist die subtile, die Sie noch haben. Wenn Sie nur auf der Suche nach den am wenigsten signifikanten bit, gibt es keine Notwendigkeit, die Mühe mit der Besetzung überhaupt.