問題タブ [uint8t]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 1バイト整数データ型
私は次のコードを書きました:
しかし、c
—16進数で12を入力すると、出力も。になりc
ます。私は12を期待していました。後で私はそれを学びました:
uint8_t
通常はのtypedefですunsigned char
。したがって、実際にはc
ASCII0x63として読み取られます。
I / Oを実行している間は整数として動作し、charとしては動作しない1バイト整数はありますか?
objective-c - Objective CでBluetooth心拍数モニターからバイトデータを抽出する方法
バイトと uint8_t の値を理解するのに苦労しています。
心拍数サービス プロトコルを介して Bluetooth 4.0 心拍数モニターからデータを読み取る Apple によって作成されたサンプル プロジェクトを使用しています。サンプル プロジェクトは、以下のように心拍数データを提供します。
(reportData[0] & 0x01) はデータ配列 reportData の最初のデータ ビットを返すと仮定していますが、2 番目にアクセスする方法がわかりません (reportData[0] & 0x02) は思ったように機能しません。理想的には、reportData[0] のすべてのデータをチェックし、それに基づいて、保存されている場所に応じて reportData[4] または [5] の rr 間隔データを取得し、それを反復して各値を取得します。そこには複数の値が格納されている可能性があります。
私が知っている初心者の質問ですが、答えを見つけるのに苦労しています。実際、答えを確立するための検索用語も見つかりません。
c++ - uint8_t ≠ unsigned char はいつですか?
C および C++ によると、CHAR_BIT >= 8
.
しかし、いつでもCHAR_BIT > 8
,uint8_t
は 8 ビットで表すことさえできません。は、システム上の任意のデータ型の最小ビット数である
ため、より大きくする必要があります。CHAR_BIT
uint8_t
以外のタイプであると法的に定義できるシステムの種類は何unsigned char
ですか?
(C と C++ で答えが異なる場合は、両方を知りたいです。)
c++ - char* と std::uint8_t* の間の reinterpret_cast - 安全ですか?
現在、バイナリ データを扱う必要がある場合があります。C++ では、一連のバイトを扱います。最初から、char
ビルディング ブロックでした。1を持つように定義されたsizeof
、それはバイトです。また、すべてのライブラリ I/O 関数はchar
デフォルトで使用します。すべては問題ありませんが、常に少しの懸念がありました。一部の人々を悩ませた少し奇妙な点です。1 バイトのビット数は処理系で定義されています。
そのため、C99 では、開発者が固定幅整数型を簡単に表現できるように、いくつかの typedef を導入することが決定されました。もちろん、可搬性を損なうことは絶対にしたくないので、オプションです。その中で、固定幅の 8 ビット符号なし整数型uint8_t
として C++11 に移行されstd::uint8_t
た は、8 ビット バイトを本当に処理したい人にとって最適な選択でした。
std::uint8_t*
そのため、開発者は新しいツールを採用し、8 ビットのバイト シーケンスをstd::vector<std::uint8_t>
やその他の形式で受け入れることを明示的に示すライブラリの構築を開始しました。
しかし、おそらく非常に深く考えて、標準化委員会は の実装を要求しないことを決定したため、開発者がs をバイナリ データとしてstd::char_traits<std::uint8_t>
簡単かつ移植可能にインスタンス化したりstd::basic_fstream<std::uint8_t>
、簡単に読み取ったりすることを禁止しました。std::uint8_t
あるいは、1 バイトのビット数を気にせず、満足している人もいます。
char*
しかし、残念なことに、2 つの世界が衝突し、データを as として取得し、それを期待するライブラリに渡さなければならない場合がありますstd::uint8_t*
。でもちょっと待って、char
可変ビットじゃなくstd::uint8_t
て8固定じゃないの?データが失われますか?
さて、これについて興味深い標準があります。はchar
正確に 1 バイトを保持するように定義されており、バイトはメモリのアドレス指定可能な最小のチャンクであるため、ビット幅が のビット幅よりも小さい型は存在できませんchar
。次に、UTF-8 コード単位を保持できるように定義されています。これにより、最小値である 8 ビットが得られます。これで、8 ビット幅である必要がある typedef と、少なくとも 8 ビット幅の型ができました。しかし、代替手段はありますか?はいunsigned char
。char
の署名は実装定義であることを思い出してください。他のタイプは?ありがたいことに、いいえ。他のすべての整数型には、8 ビット外の範囲が必要です。
最後に、std::uint8_t
オプションです。つまり、この型を使用するライブラリは、定義されていないとコンパイルされません。しかし、それがコンパイルされるとどうなるでしょうか? これは、8 ビット バイトとCHAR_BIT == 8
.
8 ビットのバイトがあり、 または のいずれかとして実装されているというこの知識をstd::uint8_t
得たら、 からへ、またはその逆を行うことができると仮定できますか? ポータブルですか?char
unsigned char
reinterpret_cast
char*
std::uint8_t*
これは、私の標準語の読解力が私を失敗させるところです。私は安全に派生したポインター ( [basic.stc.dynamic.safety]
) について読み、私が理解している限り、次のことを読みました。
触れなければ安全ですbuffer2
。私が間違っている場合は修正してください。
したがって、次の前提条件が与えられます。
CHAR_BIT == 8
std::uint8_t
が定義されています。
バイナリデータを扱っていて、潜在的な符号の欠如が問題にならないと仮定すると、移植性があり、前後にキャストchar*
しても安全ですか?std::uint8_t*
char
説明付きの標準への参照をいただければ幸いです。
編集: ありがとう、ジェリー コフィン。標準 ([basic.lval]、§3.10/10) からの引用を追加します。
プログラムが、次の型以外の glvalue を介してオブジェクトの格納された値にアクセスしようとした場合、動作は未定義です。
...
— char または unsigned char 型。
EDIT2:わかりました、さらに深くなります。std::uint8_t
の typedef であることは保証されませんunsigned char
。拡張符号なし整数型として実装でき、拡張符号なし整数型は §3.10/10 に含まれていません。今何?
bit-shift - 16 ビット整数を 8 ビット整数に変換しますか?
16 ビットの符号と大きさの整数を 8 ビットの符号と大きさの整数にコピーする C コードを実装しています。それは可能ですか?誰かがこれを行う方法を説明してもらえますか?
コードスニペット:
最初の 2 桁を変数 b にコピーし、次の 2 桁を変数 c にコピーする方法は?
objective-c - uint8_t[] 配列を NSString に変換 (null)
(char *)uint8_t 配列の NSString への変換が機能しない理由がわかりません。ivString は常に (null)
cipherData NSData * 0x1edaf3a0 16 バイト
cipherString NSString * 0x00000000
初期化ベクトル uint8_t [16]
ivString NSString * 0x00000000
キー NSString * 0x000d28c4 @"1234567890123456"
プレーン NSData * 0x1ed80760 9 バイト
PS
これもうまくいきません。まだあります (null)
私が呼び出しているメソッドは次のとおりです。
c - int から uint8_t への変換
int
値を次のように変換する正しい方法ですかuint8_t
:
x が 0 未満になることはないと仮定しますgcc
。上記の行に対して警告は表示されませんが、それが正しいかどうか、または int を uint8_t に変換するより良い方法があるかどうかを確認したかっただけです。
PS標準関数を提案する場合、LinuxでCを使用します
c++ - uint8 のベクトルを文字列に変換します
タイプ uint8 のベクトルへのポインターがあります。
このポインターを取得して、ベクター内のデータをその内容を表す完全な文字列に変換するにはどうすればよいでしょうか?