C/C++ のエンディアンと型変換についての深い理解
バイトオーダーと型変換を分けて話すと、誰もがとても簡単だと思うかもしれませんが、深く理解することはできません。それらを組み合わせて議論すれば、より深く理解できるかもしれません。
バイトオーダーと型変換の基本が理解できない場合は、次のブログを参照してください:
https://my.oschina.net/u/1783725/blog/647973 ラージバイトオーダーとスモールバイトオーダー
https://my.oschina.net/u/1783725/blog/700970 型変換
本題に入る前に、簡単な一文:
異なるシステム数字は、データ型の異なるバイトサイズに対応します
詳細 2 つの関係を紹介します
バイト オーダー: 操作のメモリは、メモリに表示されるデータを保存するための規則です。
ビッグ エンディアン: ビッグ エンディアンが有効、上位データが最初に下位アドレスのメモリに配置され、下位データが上位アドレスのメモリに配置されます。リトル エンディアン: リトル エンディアンが有効、下位データは最初に低アドレスのメモリに配置され、次に上位のデータが配置されます 上位アドレスのメモリに入力するとき
メモリを操作するとき (例: memcpy)、バイトオーダーを考慮する必要があります
型変換: 操作バイト変換サイズの種類に応じて、メモリから読み取られるデータであるデータを読み取ることです。
桁数が多いものは桁数の少ないものに変換(位置データを残して上位桁が切り捨てられます)、桁数が少ないものは桁数が多いものに変換されます(上位桁データは切り捨てられます) 0で埋めてください)。
それらを理解するための例
1. メモリ(memcpy)を操作する場合、割り当てはバイトオーダーを考慮する必要があります
1: unsigned long long型の0xABCDEF1234をunsigned longに割り当てます。 type 変数、バイトオーダーとは関係ありません
2: unsigned long Long 型 0xABCDEF1234 変数は、memcpy を使用して short 型変数を使用します。0 であることがわかり、バイトオーダーとは関係ありません
コードは次のとおりです:
#include <stdio.h>int main(int argc, char *argv[]) { unsigned long long ullVar = 0xABCD1234; unsigned long ulVar1 = 0; unsigned long ulVar2 = 0; /*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/ memcpy(&ulVar1,&ullVar,sizeof(ulVar1)); /*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/ ulVar2 = ullVar; printf("ulVar1=%x ulVar2=%x \n",ulVar1,ulVar2); //输出:ulVar1=0 ulVar2=abcd1234 return 0; }

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









php と c# の違いは次のとおりです: 1. 言語の型システムが異なります。PHP は動的型ですが、C# は静的型です。 2. 使用されるプラットフォームが異なります。PHP はクロスプラットフォームを実現できますが、C# は Windows 専用です。 3. . プログラミングのパラダイムが異なり、PHP はオブジェクト指向、手続き型、関数型プログラミングをサポートし、C# はオブジェクト指向プログラミングに傾いている; 4. 実行速度が異なり、PHP の方が高速で、C# は比較的遅い; 5.アプリケーションのシナリオは異なります。PHP は Web 開発、サーバーなどに使用されます。C# は Windows デスクトップおよび Web アプリケーションに使用されます。

このチュートリアルでは、helpofclangtools を使用して C/C++ コード形式設定ツールを作成するプログラムについて説明します。SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 次に、現在のユーザーが読み取りおよび書き込み権限を持つ場所に Python ファイルを作成します。例 importoscpp_extensions=(".cxx",".cpp&

sizeof() で取得される構造体型の要素のサイズは、個々のメンバーのサイズと必ずしも同じではありません。コンパイラは、アライメントの問題を回避するためにパディングを追加する場合があります。したがって、寸法が変更される可能性があります。パディングは、構造メンバーの後に大きいサイズのメンバーが続く場合、または構造の最後にある場合に追加されます。コンパイラが異なれば、アライメント制約のタイプも異なります。 C 標準では、全体的なアライメント構造は実装に依存します。ケース 1 この場合、double z の長さは 8 バイトであり、x (4 バイト) よりも大きくなります。したがって、さらに 4 バイトのパディングが追加されます。さらに、short 型データ y にはメモリ内に 2 バイトのスペースがあるため、余分な 6 バイトがパディングとして追加されます。サンプルコード #include<stdio.h>structmyS
![vscode 構成 C/C++ 実行環境について詳しく説明した記事 [乳母レベルの指導]](https://img.php.cn/upload/article/000/000/024/63fc94eb8852a975.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
VScode で C/C++ を開発するにはどうすればよいですか? C/C++環境を構成するにはどうすればよいですか?次の記事では、VScode 構成 C/C++ 実行環境のチュートリアル (乳母レベルの指導) を紹介します。

ここでは、C または C++ におけるプリインクリメントとポストインクリメントとは何かを見てみましょう。前置インクリメントと後置インクリメントは両方ともインクリメント演算子です。しかし、それらの間にはほとんど違いはありません。前置インクリメント演算子は、まず変数の値をインクリメントしてから、それを他の変数に代入しますが、後置インクリメント演算子の場合は、まず変数に代入してから、値を増分します。例 #include<iostream>usingnamespacestd;main(){ intx,y,z; x=10; y=10;&nb

関数 strcpy() は標準ライブラリ関数です。ある文字列を別の文字列にコピーするために使用されます。 C 言語では "string.h" ヘッダー ファイルで宣言され、C++ 言語では cstring ヘッダー ファイルで宣言されます。宛先へのポインタを返します。これは、C 言語の strcpy() の構文、char*strcpy(char*dest,constchar*src); strcpy() のいくつかの重要なポイントです。文字列全体をターゲット文字列にコピーします。文字列を追加するのではなく、文字列全体を置き換えます。ソース文字列は変更されません。以下は、C 言語での strcpy() の例です。 Example Online Demo#in

ここでは、任意の数値の階乗結果の末尾のゼロの数を計算する方法を見ていきます。したがって、n=5 の場合は 5! =120。末尾の 0 は 1 つだけです。 20! の場合、20!=2432902008176640000 のように 4 つのゼロになります。最も簡単な方法は、階乗を計算して 0 をカウントすることです。ただし、n の値が大きい場合、このアプローチは失敗します。そこで、別のアプローチをとってみます。素因数が 2 と 5 の場合、末尾にゼロが表示されます。 2と5を計算すると結果が得られます。これを行うには、このルールに従います。 Trailing 0 = 階乗 (n) 素因数の 5 のカウント アルゴリズム countTrailingZeros(n)begin&

このセクションでは、C または C++ コードで if 部分と else 部分の両方を実行する方法を説明します。この解決策は少し難しいです。 if と else が続けて実行されると、あたかも if-else のないステートメントが実行されたかのようになります。ただし、ここでは、それらが存在する場合にそれらを順番に実行する方法を見ていきます。サンプルコード #include<iostream>usingnamespacestd;intmain(){ intx=10; if(x>5) { &
