int型のデータを1Byteずつ取り出す方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Taylor

int型のデータを1Byteずつ取り出す方法

#1

投稿記事 by Taylor » 10年前

4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#2

投稿記事 by みけCAT » 10年前

Taylor さんが書きました:4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
好みのエディタを開き、プログラムを好みの入力デバイス(または入力ソフトウェア)を通じて打ち込めば良いです。
Taylor さんが書きました:1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。
質問をする場合は、使用する言語を明記するといいでしょう。とりあえずC言語での話をします。
まず、1Byteは(多くの場合)8ビットです。
C言語では右シフト演算子>>を用いると2進数で上位桁のデータを下位桁に持ってくることができます。
int型のデータxがあった時に、((x>>(8*n))&0xFF)という式で、下からnバイト目(最下位を0バイト目とする)のバイトを取り出すことができます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#3

投稿記事 by Dixq (管理人) » 10年前

コード:

#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で論理積を取ることで取り出せるのです。

Taylor

お詫び

#4

投稿記事 by Taylor » 10年前

使用言語はC言語です。書き忘れましたのでお詫びいたします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#5

投稿記事 by みけCAT » 10年前

オフトピック
ちなみに、C言語のint型は少なくとも-32767~32767の整数を格納できますが、4Byteのデータを格納できる保証は規格上ありません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Aozora0630
記事: 85
登録日時: 10年前
住所: 日本
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#6

投稿記事 by Aozora0630 » 10年前

コード:

#include <stdio.h>

int main(void){
	int a = 255;
	char byte[8];
	
	sprintf(byte,"%x",a);
	
	printf("%s\n",byte);
}
結果:ff

これに文字列処理を足したら出きるんじゃないでしょうか?
因みに、byteの[1]と[2]でintの1byteです。

分かり難いですねw。

つまり、byte変数の2バイトがa変数に於ける1バイトです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#7

投稿記事 by みけCAT » 10年前

Aozora0630 さんが書きました:因みに、byteの[1]と[2]でintの1byteです。
byteの[0]と[1]にaの下位1byteの十六進数表現が格納されます。
Aozora0630 さんが書きました:byte変数の2バイトがa変数に於ける1バイトです。
変数にかかわらず1バイトは1バイトです。
十六進数を用いた場合、a変数に於ける1バイトをbyte変数の2バイトとして表現できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

interwe

Re: int型のデータを1Byteずつ取り出す方法

#8

投稿記事 by interwe » 10年前

上記の方のは若干誤りがあるように思いますね

Aozora0630
記事: 85
登録日時: 10年前
住所: 日本
連絡を取る:

Re: int型のデータを1Byteずつ取り出す方法

#9

投稿記事 by Aozora0630 » 10年前

interwe さんが書きました:上記の方のは若干誤りがあるように思いますね
え、私のでしょうか?

誤りを教えていただけると助かります

閉鎖

“C言語何でも質問掲示板” へ戻る