
long型のデータを配列を使って1byte毎に分けたい処理を作りたいのですが、
やりかたとしてはlong型のアドレスをポインタ変数に渡して、
ポインタ変数をバイト配列に代入する方法になりますでしょうか?
具体的なプログラムはこんな感じと考えてますが
unsigned long LONG:
unsigned char AAA[8], *pon, i:
pon = &LONG
for(i=0 i<8 i++)
{
AAA[i] = *pon + i;
}
C言語に詳しい方教えてください、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
バイトオーダーを無視してよいのであれば...
memcpy(AAA, &LONG, sizeof(LONG));
とするのが基本です。
以下のように、共用体を使う方法もありますが、任意のバイト配列に格納するにはさらにコピーが必要になります。
union U
{
unsigned long LONG;
unsigned char AAA[sizeof(unsigned LONG)];
} u;
u.LONG = 値;
もし、ビッグエンディアンとして扱いたいのであれば次のようにします。
for (std::size_t i = 0; i < sizeof(LONG); i++)
AAA[i] = LONG >> (CHAR_BIT * (sizeof(LONG) - 1 - i));
リトルエンディアンとして扱うなら次のようにしてください。
for (std::size_t i = 0; i < sizeof(LONG); i++)
AAA[i] = LONG >> (CHAR_BIT * i);
ちなみに、unsigned char型は必ず1バイトですが、ビット数は8ビットとは限りませんので、必ずCHAR_BITを使う必要があります。
また、unsigned long型が何バイトなのかも処理系定義です。
32ビット以下の多くの処理系や64ビットWindowsではunsigned long型は32ビットですが、多くの64ビットの処理系ではunsigned long型は64ビットです。
また、char型が16ビットや32ビットや64ビットの処理系も実在しますので、その場合はunsigend long型が2バイトや1バイトになることもあります。
一部のDSPではunsigned long型が48ビットで6バイトというものも存在します。
No.4
- 回答日時:
「longは4バイト」などという出鱈目を書くのはいかがなものか>#3. あと, エンディアンを意識しなければならないがゆえに, こ
の文章ではどうすべきかわからない. 「1byte毎に分けたい」というのはいいとして, その各バイトはどのように並んでいてほしい?お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
リッチテキストボックスの中身...
-
命名規則 VB 構造体
-
「#undef」と「#define」の使い...
-
10進数の変換方法
-
変数宣言および代入について
-
構造体にする理由・利点・使用例
-
C++ 構造体の一括初期化 {0}
-
Integer変数をカラにしたいので...
-
VBAの変数のデータ型を変更する...
-
CStringからchar*への型変換に...
-
C言語 配列の長さの上限
-
char*を初期化したいのですが
-
init関数の意味
-
System.IO.Directory.GetFiles...
-
allocってなんですか?
-
C++で関数ポインタから関数名を...
-
ExcelVBAで質問です。離れた二...
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
リッチテキストボックスの中身...
-
構造体のデータを丸ごとコピー...
-
構造体の初期化方法について
-
C言語 構造体の中に共用体を定...
-
構造体にする理由・利点・使用例
-
VBAの変数のデータ型を変更する...
-
命名規則 VB 構造体
-
VBAにてcolorindexを変数に格納...
-
aspでユーザー定義の構造体を作...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
long型のデータをバイト型の配...
-
構造体のポインタにNULLが入らない
-
値が代入されてない時
-
C++ 構造体の一括初期化 {0}
-
整数から16進数への変換 現在c...
-
関数の引数の順番の混乱を回避...
おすすめ情報