ページ 1 / 1
int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月25日(土) 22:20
by Taylor
4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月25日(土) 22:29
by みけCAT
Taylor さんが書きました:4Byteのデータ 19060900 を1Byteずつ取り出して表示するプログラムを書くにはどのようにすれば良いですか?
好みのエディタを開き、プログラムを好みの入力デバイス(または入力ソフトウェア)を通じて打ち込めば良いです。
Taylor さんが書きました:1行ずつ整数で出力させたいのですが、全く分からないので少しアドバイスを頂けたらと思います。
質問をする場合は、使用する言語を明記するといいでしょう。とりあえずC言語での話をします。
まず、1Byteは(多くの場合)8ビットです。
C言語では右シフト演算子>>を用いると2進数で上位桁のデータを下位桁に持ってくることができます。
int型のデータxがあった時に、((x>>(8*n))&0xFF)という式で、下からnバイト目(最下位を0バイト目とする)のバイトを取り出すことができます。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月25日(土) 22:59
by Dixq (管理人)
コード:
#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で論理積を取ることで取り出せるのです。
お詫び
Posted: 2015年7月25日(土) 23:00
by Taylor
使用言語はC言語です。書き忘れましたのでお詫びいたします。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月25日(土) 23:04
by みけCAT
オフトピック
ちなみに、C言語のint型は少なくとも-32767~32767の整数を格納できますが、4Byteのデータを格納できる保証は規格上ありません。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月26日(日) 08:59
by Aozora0630
コード:
#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バイトです。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月26日(日) 09:34
by みけCAT
Aozora0630 さんが書きました:因みに、byteの[1]と[2]でintの1byteです。
byteの[0]と[1]にaの下位1byteの十六進数表現が格納されます。
Aozora0630 さんが書きました:byte変数の2バイトがa変数に於ける1バイトです。
変数にかかわらず1バイトは1バイトです。
十六進数を用いた場合、a変数に於ける1バイトをbyte変数の2バイトとして表現できます。
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年7月31日(金) 22:37
by interwe
上記の方のは若干誤りがあるように思いますね
Re: int型のデータを1Byteずつ取り出す方法
Posted: 2015年8月01日(土) 09:20
by Aozora0630
interwe さんが書きました:上記の方のは若干誤りがあるように思いますね
え、私のでしょうか?
誤りを教えていただけると助かります