私は、符号なしchar配列へのポインタを持っています。 unsigned char *uc_array
。アドレスが指し示すコンテンツを8ビット右にシフトすると、uc_array + 1
になりますか?Cビット操作char配列
答えて
コンテンツをシフトすると、値が変更され、メモリ内では移動されません。
彼らは 'uc_array ++'にありますが(post inc)です。 –
ありません....もしあればあなたは、ポインタが指しているものの値をインクリメントしている*uc_array++
ポインター逆参照。しかし、これを行うと、uc_array++
は、*uc_array
によって返された「隣の隣接値」を指すポインターのアドレスをインクリメントしています。使用のプラットフォームとコンパイラに依存
は、そのポインタ演算は、ポインタのタイプのサイズに依存していることを忘れないでください、文字ポインタのために、それは、int型のため、1ですその4 ...
な
memmove(uc_array + 1, uc_array, bytesize_of_array);
として解釈するとき、あなたの質問にのみ、私はあなたが8ビットバイトのプラットフォーム上にあると仮定し、かつシフトすることによって、あなたが長いbit-として解釈する際のビットをシフトする意味あることだ私には理にかなっています連続したバイトのシーケンスシフトの説明のために配列の後のchar)。そして実際にアドレスuc_array
に格納された値はuc_array + 1
に格納されます。しかし
あなたはこの
for(unsigned char *x = uc_array; x != uc_array + byte_count; ++x)
*x >>= 8;
のようなループを行うと、あなただけのバイトのバイトは、すべてのビットを離れてシフトし、そこにすべてを無効にします8ビットバイトを仮定した場合。
いいえ値の変更は、その値にのみ影響し、隣接値には影響しません。これにはシフト演算子が含まれます。
シフト演算子によってシフトアウトされたビットは "失われています"。
データをシフトする方法によって異なります。これ(quint16)(* uc_array)>> 8のようなことをすれば、最初のバイトは2番目のバイトに移動します。しかし、単に(* uc_array)>> 8を実行すると、他のものはあなたのデータを空にします。
- 1. C++のビット配列のフィールドの操作
- 2. 多次元char配列のビット操作をC言語で行う方法
- 3. Pythonのビット配列操作
- 4. C++ビット操作
- 5. Cビット操作
- 6. Cビット設定(ビット操作)
- 7. char配列の配列C++
- 8. ANSI Cのビット操作ライブラリ
- 9. Cコードでのビット操作
- 10. ビット単位のC操作
- 11. charのビット単位シフト配列
- 12. C char配列ポインタ
- 13. Cのchar配列?
- 14. C#でのchar(C++)の操作
- 15. C++ Cでchar配列
- 16. C++は、C++でchar配列
- 17. C#pinvoke C char配列
- 18. charポインタとchar配列のstrcpyオーバーフローC
- 19. C++ char配列をintに、intをchar配列に
- 20. は(Cで)1D char配列
- 21. Cプログラミング、charポインタの配列
- 22. C constの配列unsigned char [] []
- 23. C++ char配列のスコープ
- 24. Intと* Char-C++の配列
- 25. char配列へのポインタC++
- 26. const char * srcからchar * destへのC文字単位の文字列操作
- 27. ビット操作AND
- 28. ビット操作
- 29. ビット操作
- 30. Cでのビット単位の操作 - AnyOddBit
注:OPの 'uc_array ++ 'を' uc_array + 1'に変更しました。 –