• 締切済み

一定のバイト列から指定サイズのビットを取り出す。

RAPTsongの回答

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.3

1byte == 8bit だと仮定できるとき、 int( 103 / 8 ) byte だけ先に取り出す。 次に、( 103 % 8 ) bit を取り出す。 ってな感じでしょうか。

関連するQ&A

  • 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の周辺関係事情より、バイトでのアクセスが 可能なように、ハード割り当てが出来ません。 従って、現在は、プログラムにて、ビットを集め、バイトにして、アクセスしています。 なにか良い宣言方法があれば、ご伝授していただけないでしょうか? 宜しくお願いいたします。

  • OSのビットサイズを取得したいのですが・・・

    コマンド プロンプトで現在このPCで動いているOS(Windows 7)のビットサイズを変数に取得する必要があります。 コンピューターのプロパティで表示されますが、これでは変数に自動的に代入されないので、プログラム処理ができません。 SET コマンドでは、CPUのサイズが分かってもOSのビットサイズはわかりません。 SET コマンドで表示される中に ProgramW6432=C:\Program Files の記述があれば、64ビットOSが動いていると考えたいのですが、32ビットOSで動いているPCを持っていないので、比較ができません。 ご存知の方のアドバイスをお願いします。

  • 16ビットDLLから32ビットDLLをコールする方法

    現在VC++で「16ビットDLLから32ビットDLLをコール」をしようと思って 調べていましたが、このご質問に頼るしか方法がなく、困っています。 状況  VB4.0(16bit)・・・16bit版でEXEを作成  VC++1.51・・・・・16bitDLLを作成  VC++4.0/6.0・・・・32bitDLLを作成  VB4.0(16bit)のEXEから、16bit版のDLLをコールし処理を行いたいの  ですが、16bit版DLLで扱えないVC++の関数(プロセス関数:spawn??())  を利用しなければならず、16bit版DLLの機能を32bit版DLLで作成し、  16bit版DLLから32bit版DLLを呼び出そうと思っております。 誰か助けて! 是非、皆様のお知恵を拝借致したく思います。

  • 1バイト文字の上位4ビット・下位4ビットの入れ替え方法を教えて下さい

    あるパスワードをテキストファイルに書き込む処理です。 そのままだと、パスワードの意味が無いので、上位4ビットと下位4ビットを入れ替えて保存しようと思います。 上位・下位それぞれ4ビットシフトするところまでは出来ました。  Dim a As Integer  Dim a1 As Integer  Dim a2 As Integer  a = Asc("a")  a1 = a \ 2 ^ 4  a2 = a * 2 ^ 4  MsgBox (Hex(a1))  MsgBox (Hex(a2)) が、それを8ビットに戻す方法が分かりません。 また、パスワードは1バイト文字による文字列ですが、文字列長分を1バイトずつバッファに読み込んで、変換し、同サイズのバッファに詰め込んでいく処理も分かりません。 以前、MS-C(MSDOS上のC言語)を少しやったので、それでなら分かるのですが、VBは全くの初心者で、調べても調べても見当がつきません。 どうか教えて下さい。 宜しくお願い致します。

  • バイト列とバイナリ列の違いが分かりません。

    掲題について質問です。 例えばプログラミングにおける文字列に対して 時々、「文字列はバイト列とみなすことができる。」 という記述を見かけます。 具体的にいうとRuby1.8系における文字列がそのバイト列らしいのです。 例えば、 hoge = "文字列"; print hoge.unpack("C*") とすると [230, 150, 135, 229, 173, 151, 229, 136, 151] というようにUTF-8で符号化された各8bitの0~255までの値の配列が返って来ます。 これはバイト列になるのですか? それとも hoge = "文字列"; print hoge.unpack("H*") ["e69687 e5ad97 e58897"] (それぞれ一文字が1byte3つ分の列となっています。) このように16進数で表された形式がバイト列というあつかいなのでしょうか? そしてバイナリ列とバイト列の違いはなんでしょうか? よろしくご教授ください。

  • フォントサイズの指定

    テキストエディタでフォントサイズを指定する際、 何もタグで指定せずに「あいうえお」と表記して、htmlファイルにして閲覧してみると、標準の文字サイズで表示されますよね。 で、上記に<font size=3>「かきくけこ」</font>で指定して、挿入し、閲覧してみると 「あいうえお」「かきくけこ」 と言うかんじになりますよね。 この場合、文字サイズを指定しない「あいうえお」と <font size=3>に指定した「かきくけこ」が、 見たところ文字サイズが一緒でした。 これはfont size=3というのは、タグでサイズを指定しない標準サイズと同じってことでしょうか? タグで指定しない標準文字列と、Font size=3で指定した文字列をどちらも同じhtmlファイルのソースに記述してます。 こういう場合、気にしなくても大丈夫でしょうか。 (レイアウトが崩れたりしないでしょうか)

    • ベストアンサー
    • HTML
  • soraris10 ksh で文字列をバイト指定し

    soraris10 ksh で文字列をバイト指定して入れ替える 8バイトの文字列の4バイト目と7バイト目を入れ替えたい場合、簡単にできる方法はありますか? 文字列は半角英字のみです。 echo abcdefgh | awk ’{print substr(ゴニョゴニョ) substr(ゴニョゴニョ)}’ で頑張ってやりましたが、美しくなかったので、sedとかでもっと簡単にできないでしょうか。 宜しくお願いいたします。

  • ビットスワップとバイトスワップとは何ですか??

    こんにちは。 今、C言語でのプログラミングについて勉強しているのですが、 その際の課題で、「32bit値を入力するとビットスワップされた結果とバイトスワップされた結果が 表示されるプログラムを作成して下さい(入力及び表示は16進数)」といったものが出されました。 で、その際のビットスワップとバイトスワップの意味がわからず、困っています。 どんな結果が出力されたら良いのか、ご教授いただけませんでしょうか? どうかよろしくお願いいたします。

  • C++での24bit符号付き整数値の処理

    現在wavファイルからデータを読み出し、少数倍して再び格納するプログラムを作成しています。 量子化ビット数が16,32bitの場合は読み出したデータをshort型,int型の変数に入れて、そのまま計算が出来るのですが、C++には24bitの変数型がないため、24bitデータの処理に苦戦しています。 1サンプルあたり24bitで格納されているデータを読み出し、(double)倍したのち再び24bitずつ(3byte間隔で)書き込むにはどのようにすれば良いでしょうか? 一度int型に格納し、計算してから上位3byteを書き込む方法が簡単だとは思うのですが、負の値の扱いに困っています。 どなたかサンプルプログラムをお教えいただけると幸いです。

  • 数値を2進数文字列に変換するものなんですが・・・

    数値を2進数の文字列に変換するプログラムを関数として作成しているんですが、わからないことがあるのでお願いします。 char *itob(int value, int size, char binary[]) { int count = 0; /* binaryの添え字 */ int bit = size * 8; /* ビットになおす */ int mask = 1 << bit - 1; /* 先頭ビットに1を立てる */ /* 数値を2進数の文字列に変換する処理 */ do { if(value & mask) { /* valueとmaskのAND(論理積) */ binary[count] = '1';/* '1'を代入 */ }else { binary[count] = '0';/* '0'を代入 */ } value <<= 1; /* valueを左へ1ビットシフト */ count++; /* countを1たす */ }while(count < bit); /* 繰り返しを行う条件 */ binary[count] = '\0'; /* 最後に'\0'を入れる */ return binary; /* 変換した値を戻り値として返す */ } この前にもプログラムがありますが、コンパイルして実行する際に 10001 1110 と入力したら、 11111 という答えを出したいのですが、 これを実行すると、 00000000000000000000000000011111 となってしまいます。 これを11111とするためにはプログラムにどのような処理をすればよいのかわかりませんのでどなたかおわかりのかた解説をお願いします。