Ich habe einen Zeiger auf eine vorzeichenlose Char-Array, z. unsigned char *uc_array
. Wenn ich den Inhalt, um den die Adresse zeigt, um 8 Bits nach rechts verschiebe, werden sie in uc_array + 1
sein?C Bit Manipulation Char-Array
Antwort
Durch Verschieben des Inhalts wird der Wert geändert und nicht in den Speicher verschoben.
Sie werden immer noch in 'uc_array ++ 'obwohl (post inc). –
Nein .... Wenn Sie einen Zeiger *uc_array++
dereferenzieren, erhöhen Sie den Wert dessen, auf was der Zeiger zeigt. Wenn Sie dies tun, erhöhen Sie jedoch die Adresse des Zeigers uc_array++
, der auf den "nächsten benachbarten Wert" zeigt, der von *uc_array
zurückgegeben wird.
Vergessen Sie nicht, dass die Zeigerarithmetik auf der Größe des Typ des Zeigers, für Zeichenzeiger abhängig ist, ist es 1, für ints, seine 4 je nach Plattform und verwendet Compiler ...
nur Ihre Frage macht Sinn für mich, wenn wie
interpretiertmemmove(uc_array + 1, uc_array, bytesize_of_array);
ich nehme an, Sie auf 8-Bit-Byte-Plattform sind, und dass Sie durch Verschieben der Bits bedeuten verschieben, wenn sie als lange bit- interpretiert Sequenz von aufeinanderfolgenden Bytes (und es muss eins sein char nach dem Array, um die Verschiebung zu berücksichtigen). Dann wird der unter der Adresse uc_array
gespeicherte Wert unter uc_array + 1
gespeichert.
Allerdings, wenn Sie diese
for(unsigned char *x = uc_array; x != uc_array + byte_count; ++x)
*x >>= 8;
eine Schleife zu tun und gehen davon aus 8-Bit-Bytes Sie gerade dort alles zunichte machen, Byte für Byte alle Bits Verschiebung weg.
Nein. Änderungen an einem Wert wirken sich nur auf diesen Wert und nicht auf benachbarte Werte aus. Dies schließt die Schichtbetreiber ein.
Die Bits, die von einem Schichtoperator herausgeschoben werden, sind "verloren".
Es hängt davon ab, wie Sie Ihre Daten verschieben. Wenn Sie so etwas tun (quint16) (* uc_array) >> 8, wird das erste Byte in das zweite verschoben. Aber wenn nur (* uc_array) >> 8 dann, wie die anderen sagt, werden Sie Ihre Daten leeren.
- 1. Java println (charArray + String) vs println (charArray)
- 2. Bit Manipulation in C# unter Verwendung einer Maske
- 3. Bit-Manipulation für große Integer-Klassen?
- 4. Bit-Manipulation: Clearing-Bereich von Bits
- 5. C# string manipulation
- 6. C-Programmierung: String-Manipulation
- 7. C/C++ Bit twiddling
- 8. Gute C++ String Manipulation Bibliothek
- 9. C++ Compil-Time-String-Manipulation
- 10. String-Manipulation in Objective-C
- 11. -Code für die Prüfung, ob Doppel eine Potenz von 2 ohne Bit-Manipulation in C++ ist
- 12. Senden von vielen Werten in einem charArray
- 13. C# 32-Bit-App 64-Bit-Registrierung
- 14. C/C++ effizientes Bit-Array
- 15. Manipulation von Feldern in einem Array von Bits in C++
- 16. Canvas Manipulation vs Element Manipulation
- 17. Bit packen in C
- 18. Bit Striping in C
- 19. 64-Bit Enums? C#
- 20. PHP URL-Manipulation verhindern
- 21. Vektor Manipulation
- 22. C# Zeichenfolge Manipulation suchen und ersetzen
- 23. String-Manipulation und Datei IO in C++?
- 24. String-Manipulation/Fehler in C++ mit IOStream
- 25. Was ist der beste Weg, den Schülern die Bit-Manipulation zu erklären?
- 26. Was ist der beste Weg, Bit-Feld-Manipulation in Python zu machen?
- 27. Weird String Manipulation Problem
- 28. 64-Bit-Enumeration in C++?
- 29. C# Convert Bit zu boolean
- 30. Lesen 12 Bit Eingabe C++
Hinweis: Ich habe die 'uc_array ++' des OPs in 'uc_array + 1' geändert. –