4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。
int型のデータを1Byteずつ取り出す方法
Re: int型のデータを1Byteずつ取り出す方法
好みのエディタを開き、プログラムを好みの入力デバイス(または入力ソフトウェア)を通じて打ち込めば良いです。Taylor さんが書きました:4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
質問をする場合は、使用する言語を明記するといいでしょう。とりあえずC言語での話をします。Taylor さんが書きました:1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。
まず、1Byteは(多くの場合)8ビットです。
C言語では右シフト演算子>>を用いると2進数で上位桁のデータを下位桁に持ってくることができます。
int型のデータxがあった時に、((x>>(8*n))&0xFF)という式で、下からnバイト目(最下位を0バイト目とする)のバイトを取り出すことができます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: int型のデータを1Byteずつ取り出す方法
#include <stdio.h>
int main(){
int a = 19060900;
printf("%d\n", (a >> 24) & 0xFF);
printf("%d\n", (a >> 16) & 0xFF);
printf("%d\n", (a >> 8) & 0xFF);
printf("%d\n", (a >> 0) & 0xFF);
}
&とは論理積を表します。
0と0で0
0と1で0
1と0で0
1と1で1
という規則を持った計算方法です。
0xFF
で論理積を取るという事は32bitのint型において下8桁が1のbitを取り出すことになります。
0xFFは二進数で書くと
00000000000000000000000011111111
です。
今適当な数字
10100111011101010101010101010101
があったとすると0xFFでこの数字を論理積で計算すると
00000000000000000000000001010101
になります。
つまり下8桁を取り出すことと同義です。
なので、必要なbitだけ右にずらしてから0xFFで論理積を取ることで取り出せるのです。
Re: int型のデータを1Byteずつ取り出す方法
オフトピック
ちなみに、C言語のint型は少なくとも-32767~32767の整数を格納できますが、4Byteのデータを格納できる保証は規格上ありません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 85
- 登録日時: 10年前
- 住所: 日本
- 連絡を取る:
Re: int型のデータを1Byteずつ取り出す方法
byteの[0]と[1]にaの下位1byteの十六進数表現が格納されます。Aozora0630 さんが書きました:因みに、byteの[1]と[2]でintの1byteです。
変数にかかわらず1バイトは1バイトです。Aozora0630 さんが書きました:byte変数の2バイトがa変数に於ける1バイトです。
十六進数を用いた場合、a変数に於ける1バイトをbyte変数の2バイトとして表現できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 85
- 登録日時: 10年前
- 住所: 日本
- 連絡を取る:
Re: int型のデータを1Byteずつ取り出す方法
え、私のでしょうか?interwe さんが書きました:上記の方のは若干誤りがあるように思いますね
誤りを教えていただけると助かります