![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
int型の内容をbyteの配列にコピー
Java
-
型変換
C言語・C++・C#
-
byte[] を long,float とかに変換したい
Java
-
-
4
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
5
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
6
char*を初期化したいのですが
C言語・C++・C#
-
7
16進数を2文字ずつ配列に格納したい
C言語・C++・C#
-
8
IOException ってどういうときに起こるのでしょうか?
Java
-
9
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
10
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
11
int型の変数値をバイト列としてコピー
C言語・C++・C#
-
12
10進数を4桁のバイト配列に格納する方法
Visual Basic(VBA)
-
13
C言語32bitから64bitの移行について
C言語・C++・C#
-
14
バッファとは何ですか
C言語・C++・C#
-
15
C#でbyte配列から画像を表示させたい
C言語・C++・C#
-
16
C++17で、unsigned char * 配列を、文字列リテラルで初期化する方法はありませんか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
構造体のデータを丸ごとコピー...
-
C++ 構造体の一括初期化 {0}
-
charとucharの違い
-
C言語 構造体の中に共用体を定...
-
異なる構造体のデータのコピー
-
GTKプログラミングで型宣言する...
-
構造体のポインタにNULLが入らない
-
winsockのsendtoで送れるデータ型
-
10進数の変換方法
-
列挙子(enumlator)の内容を文字...
-
VB6.0の変数、関数の定義位置か...
-
「#undef」と「#define」の使い...
-
関数の引数の順番の混乱を回避...
-
構造体から他の構造体への代入
-
構造体の継承?再定義?
-
8個のビットを1バイトとして...
-
VBAで符号無し整数
-
[Scilab]関数の宣言とodeの使い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
C言語 構造体の中に共用体を定...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
変数の初期化について
-
構造体の初期化方法について
-
ユーザー定義型変数の一括初期化
-
FILE構造体がどのように定...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
整数から16進数への変換 現在c...
-
VB.NETのStructureというのはど...
おすすめ情報