スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

2つのchar型変数の下7bitを連結させてshort型にして数値を得る!【C言語】

もはやタイトルを読んでも意味が分かりませんよね(笑)

とりあえず、次のようなことをしたわけです。。。


2つのchar型変数(8bit)を用意します。x、yにします。

char x, y;

それぞれに「0x04」「0x01」を代入します。

x = 0x04;
y = 0x01;

x、yの内容を2進数で表記してみると...

x = 00000100
y = 00000001

となりますね。これらの下7bit(下7桁分)を連結したいのです。

x = 00000100
y = 00000001

連結後:00001000000001

そう、この連結後の14bitデータを取り出して、
十進数に直したいわけです。(ちなみに00001000000001の十進表記は「513」)
...ということで、プログラムを組んでみました。

#include <stdio.h>

int main(){
    short s = 0;
    char x = 0x04, y = 0x01;

    s = (unsigned char)x;
    s <<= 7;
    s = (s | (unsigned char)(y & 0x7f));

    printf("s = %hd\n", s);
    return 0;
}

これの結果は...

s = 513

...となりました。大成功です!


一応、プログラム中にコメントを入れておきます。

#include <stdio.h>

int main(){
    short s = 0;             // 最終的に答えが格納される(short(short int)型は16bit)
    char x = 0x04, y = 0x01; // char型変数に16進表記でデータを与える

    s = (unsigned char)x;   // 符号無しchar型にしてshort型変数に代入
        // この時のsを2進表記すると、00000000 00000100

    s <<= 7;   // sを7bit左シフト
        // この時のsを2進表記すると、00000010 00000000

    s = (s | (unsigned char)(y & 0x7f));   // yの下7bit分(y & 0x7f)をsに合成する的な。。。
        // この時のsを2進表記すると、00000010 00000001

    printf("s = %hd\n", s);   // なので「513」と出力される
    return 0;
}


説明になっていない部分が多いですが。。。

ご覧いただきありがとうございました。^^;;(逃)


さて、MIDIの解析の続きをやろーっと。。。[そのページへ飛んでみる!]
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

テーマ : プログラミング /  ジャンル : コンピュータ

コメントの投稿

非公開コメント

カテゴリー
ようこそ!
Author: Torasuke
Profile: 地元大学の情報系学部に息をひそめる二回生。
   SA SW


ブログ内検索
最近のコメント
オススメ
京都の大学生のラボブログ
Python,Java,Objective-C,GAE,Macなど
Python独習中の大学生のブログ


ltzz.info
ここの管理者さんには謁見済み!(えっ

 Use OpenOffice.org
無補償でも良いなら、MSOfficeよりOpenOfficeで十分です。

Mozilla Firefox ブラウザ無料ダウンロード
当サイトは、Firefoxというブラウザで動作確認しています。私は以前、IE派でしたが、一度乗り換えて慣れてしまうと、Firefoxのほうが便利だということを実感しました。

是非よろしくお願いします。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。