• ベストアンサー

0.5バイトづつ読み込みたいのですが。

yottaの回答

  • yotta
  • ベストアンサー率32% (26/79)
回答No.1

最小単位が1バイト(8ビット)なので1バイト読み込んで4ビットずつに分けるしか方法はありません

thulala
質問者

お礼

ありがとうございました。

関連するQ&A

  • ファイルポインタfpを、何バイト読んだかカウンタとして使うには?

    ファイルポインタfpを、何バイト読んだかカウンタとして使うには?どうしたら良いか教えてください。binary fileをオープンして、1Byteずつc=fgetc(fp); を繰り返し読込み特定の処理します。数百万バイトを読んだあたりで、こけるので、何バイト目あたりでこけているのか知りたいというのが動機です。 fp構造体の中で、今、ファイルの冒頭から何バイト読んだところ、という情報を引っ張り出して1Byte読み込むごとに(ずらずらとでいいので)表示したいです。fp->current_byte とかいう情報があるように想像するのですが、どうでしょうか。以下に、#include<stdio.h>の中で、FILE を引用します。 typedef struct { unsigned char *curp; /* Current active pointer */ unsigned char *buffer; /* Data transfer buffer */ int level; /* fill/empty level of buffer */ int bsize; /* Buffer size */ unsigned short istemp; /* Temporary file indicator */ unsigned short flags; /* File status flags */ wchar_t hold; /* Ungetc char if no buffer */ char fd; /* File descriptor */ unsigned char token; /* Used for validity checking */ } FILE; /* This is the FILE object */

  • 1バイトデータの読み出しについて

    こんばんは。 すみません。文字操作?ポインタ操作が苦手なので教えてください。 以下のような構造体があり、その構造体から1バイトずつ読み出して 自作の関数のパラメータ(1バイト指定領域)に渡したいのですが、 構造体から1バイトずつデータを読み出すには、どのようにすればいいのでしょうか? typedef struct { PACKET_HEADER head; unsigned char Sp_Pr_St[1]; unsigned char ctrl_flow[1]; unsigned char product_org[10]; unsigned char product_name[10]; unsigned char product_ver[3]; }PRODUCT_RESPONS; typedef struct { unsigned char head; unsigned char type; unsigned char data_len; } HEADER; どうぞよろしくお願いします。

  • 8個のビットを1バイトとして扱う方法

    1バイトをビット扱いする方法は、 union un_p1dr { unsigned char one_byte ; struct { unsigned char b7:1 ; unsigned char b6:1 ; unsigned char b5:1 ; unsigned char b4:1 ; unsigned char b3:1 ; unsigned char b2:1 ; unsigned char b1:1 ; unsigned char b0:1 ; } bit ; } ; #define pt_da_p1dr (*(volatile union un_p1dr *)0xffffd0) と宣言すれば、pt_da_p1dr.bit.b7 = 1 ;の様にビット扱いが出来ます。 この反対を行える宣言方法は、あるでしょうか? つまり、任意の1ビットを8ビット集め、プログラムでバイトにてアクセスしたいのですが・・・・ ARMなどは、ビットの扱いが容易に可能です。しかし、CPUの周辺関係事情より、バイトでのアクセスが 可能なように、ハード割り当てが出来ません。 従って、現在は、プログラムにて、ビットを集め、バイトにして、アクセスしています。 なにか良い宣言方法があれば、ご伝授していただけないでしょうか? 宜しくお願いいたします。

  • 4バイトでのサムチェックコード作成プログラミング

    下記のようにTx[1]からTx[19]までのサムチェックコードを Tx[21](上位)、Tx[22](下位)に格納したいのですが上手くいきません。記述の訂正点やもっと良い方法があったら教えて下さい。 unsigned char Tx[30]; unsigned int sum; for( i = 1; i < 20; i++ ) // サムチェックコード作成 sum ^= Tx[ i ]; Tx[ 22 ] = sum; //23 サムチェックコード2 sum = sum >> 8; Tx[ 21 ] = sum; //22 サムチェックコード1

  • int型(2バイト)データの分割

    int型(2バイト)データの分割 マイコンのフラッシュ領域にint型のデータ(2バイト)を 1バイトづつ書き込むのに以下のコードを考えています。 unsigned int data; unsigned char dat1,dat2; data = 555; dat1 = 0; dat2 = 0; dat1 = (char)data; dat2 = (char)data >> 8; 以下、dat1とdat2をフラッシュに書き込む。 未熟者でプログラムとして合っているのか解りません。 やり方として問題ないでしょうか? またもっと良い方法があればご教授願います。

  • ハッシュ関数

    ハッシュ関数について悩んでいます. ハッシュ関数の例として以下Wikiの引用です http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0 unsigned int hash(char *s) { unsigned int h = 0; for (;*s != '\0'; s++) { h = h * 137 + *s; } return h % 1987; } このハッシュ関数において, 「hの更新計算で用いる137という数は、2(7乗)+2(3乗)+2(0乗) というものであり、乗法した後にも2進数表現の下位の桁にも 情報が残るようになっている。そのため前の方の文字の情報が 桁あふれによって失われることはない。」 と記述されているのですが,私が考えてしまうのは以下の通りです. 「最終的にハッシュ値は合計を1987で割った余りになるのだから, 下位の桁(1~1987)に情報を残さなければならない. それぞれのsの上位から下位までの情報を合計の数値の下位に 残すのであれば,137は掛けるのではなく割るべき.」 もちろん私の考え方が間違っているのはわかりますが, なぜ137を掛けるのかを理解できません. どなたかわかりやすくご教授いただけたら幸いです.

  • ビット演算について

    いつもお世話になります。 ビット演算について教えて下さい。 unsigned char buf1[1]=0x5a unsigned char buf1[2]=0x04 unsigned char buf1[3]=0x38 5a0438(16)を3バイトの値を12ビットずつの整数で得るにはどうしたらいいのでしょうか? 2進数表記では、 5A | 04 | 38 01011010 | 00000100 | 00111000 12ビットずつとは、 010110100000 010000111000 と区分し、10進数の整数値で得たいです。どのようにすればよいでしょうか? また、0x5Aなどの16進数を2進数のビットで考えるときに、 01011010を下位4ビットを10進数整数を得るにはどうしたらよいのでしょうか? 上記2点、どうぞよろしくお願い致します。

  • 第7ビットが0の4バイト分計算

    お世話になります。ID3v2の仕様で、タグ部分のサイズを表す数字が 「第7ビットがすべて0になるようにエンコードされた4バイトのデータ であり、第7ビットは無視するため全部で28ビット」 なので、例をあげると、 0x00000201 → 257(普通は513) となります。これをファイルから読み込む時、どのようにして読み込んだらいいでしょうか。 1バイトずつcharに入れて、128の重み(普通は256)を付けて計算したら良いかと思いましたが、試しに //cに1バイト読み込んだと仮定 char c = 0xAC; unsigned int i = 0; i += c; とすると、iが -84 になってしまいました。(172になって欲しかった) 聞きたいことは以下の2つです。 1.第7ビットを無視するデータを4バイト分読み込んで、整数にするにはどうしたらいいのか 2.もしくは、ファイルから1バイトずつ読み込んで整数にするにはどうすればいいのか です。何か分かり難い文章ですが、よろしくお願いしますm(__)m

  • 縁起の悪い49抜き数字(出力について)

    C++初心者です。 10進数の整数を渡して、対応する49抜きの数値を標準出力に出力関数です。 (1)n>=8 (2)"%8\n" n 良く分からないのですが、(1)(2)のステートメントこれでいいですか。よろしくお願いします。 void printwo49(unsigned int n) { char buf[] = "01235678"; if ( (1) ) {// nが8以上ならば上位の桁がある      printwo49( (2) );// 上位の桁の処理を行う } putchar(buf[n % 8]); }

  • ゾーン10進数(アンパック10進数)の1桁の場合の表現方法は?

    ゾーン10進数(アンパック10進数)の1桁の場合の表現方法は? ゾーン10進数では上位にコード部を、下位に数値部を持ってきて、最下位バイトの上位には符号部を入れますけど、例えば-3なんかの場合は、どう表現するんでしょうか?複数桁の例示はよく見て理解できるんですが。また0の場合は符号部は+で表現するんでしょうか?