- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 589 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:46:25 ]
- まずい点あったら教えてくれと書いてるのに
まずい点を指摘したら言い訳ってどーなんだ
- 590 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:46:29 ]
- >>585
ファイルストリームのクラス階層を確認してみるべき。 fstreamとifstreamは継承階層の中で関係が全く無い。
- 591 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:53:03 ]
- >>589
いや、質問の主眼が"taking address of temporary"のWARNINGでしたので。 その他は瑣末なことと手を抜いてしまいました。 とりあえずお詫びまで。
- 592 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:56:48 ]
- まあありゃ誰がどう見てもただの揚げ足取りだな
- 593 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:03:19 ]
- >>585
ちょっとややこしいけど、そのコードには、一般によくある勘違いにかすっている 君独自の勘違いがある。 まず、ifstreamはistreamを継承してる。fstreamは、iostreamを継承してる。 そのiostreamが、istreamとostreamを継承してるから、つまり両者に共通する近い祖先はistream。 iostreamはistreamの子だけど、fstreamはifstreamの子ではない。これが一般に良くある勘違い。 で、君はこれを踏まえて、fstreamにifstreamを渡すという、更なる勘違いをしてる。 読み書き両用クラス「が」読み取り専用クラス「の」子であるのは明白なわけで、つまり君は、 このセンスがまだ身についていないか、あるいは、普通に渡すだけでダウンキャストが可能になるという、 C++の仕様に対する勘違いをしていることになる。
- 594 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:19:14 ]
- std::cinをstd::ifstreamに渡しても問題なかですか?
- 595 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:36:47 ]
- std::istreamじゃイヤなのか? なぜ f が必要?
- 596 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:47:04 ]
- >>593
そんなくどい説明必要ない。 クラス階層見れば一発で分かる。 他人の勘違いまでも決め付けるなんて教えたがりも甚だしい。
- 597 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:10:16 ]
- >>596
現実に「クラス階層見てない」人なんだし、 他に可能性が無い状況は決めつけとは言わないよ。 変な理屈で変なスイッチ入っちゃった人に絡まれるのってやだなぁ。
- 598 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:23:56 ]
- using namespace std;
は何かヘッダをincludeした後じゃないとだめなの?
- 599 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:28:19 ]
- 書くだけならお好きにどうぞ
- 600 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:39:47 ]
- VCで先に書くとstdと認識してくれないのですが
- 601 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:41:55 ]
- makeファイルがLinux、Windows、Macを識別する方法を教えてください
- 602 名前:デフォルトの名無しさん [2008/02/13(水) 15:46:10 ]
- >>600
これを機会にusing namespace std;をグローバルに置くのを やめちまいなよ
- 603 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:50:50 ]
- どこに置くのが正解なのでしょうか?
mainの中?
- 604 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:58:42 ]
- グローバルに置くのが正解
- 605 名前:602 [2008/02/13(水) 16:00:48 ]
- >>603
いや、mainの中の先頭に置いても良いけど スコープはmain内だけであってまぁ・・なんていうか・・・ using namespace std;の宣言自体を俺は勧めない
- 606 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:11:52 ]
- >>603
原則 using を使わず全部書くのが推奨だな
- 607 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:18:05 ]
- std::vector<int> hoge;
面倒でもこういう記法に慣れるが吉。
- 608 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:25:19 ]
- cout cin endlくらいはusing宣言したいな
- 609 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:39:53 ]
- (swap内で)
using std::swap; using boost::swap; using 俺ライブラリ::swap; (definition内で) using namespace boost::spirit; これしか使ってないな
- 610 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:44:03 ]
- >>608
おれもそう思う。stdにいろいろ詰め込み過ぎだ。
- 611 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:55:48 ]
- ::boost::mplを使うときに
専用の名前空間に放り込んでusing namespace ::boost::mpl;してから 共通名前空間にエイリアスとなるメタ関数を書くようにする ぐらいは許してください
- 612 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 18:52:47 ]
- 専用名前空間って、それのためにしか使わないなら、
名前空間のエイリアスnamespace hoge = boost::mpl;で十分では? それに限らず、cppファイル内ではよくやるんだが。 namespace bll = boost::lambda; namespace algo = boost::algorithm; namespace dr = System::Drawing;
- 613 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:36:33 ]
- VC++のusing namespaceは壊れてるから
専用の名前空間でも使わない方がいいよ
- 614 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:52:15 ]
- std::mapから登録していないKeyつかって[]で取り出そうとすると
出来立てのValueが返ってきますか?
- 615 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:55:30 ]
- うん
- 616 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 03:32:31 ]
- _beginthreadでマルチスレッドで実行する関数って戻り値設定できないの?
- 617 名前:デフォルトの名無しさん [2008/02/14(木) 03:53:29 ]
- くずたれの質問ですいません
class内でのstaticメソドはどういう役割をするんでしょうか csharpやjavaだとわかるんですが C++でのstaticメソッドは、いまいち解りません どなたか解説お願いしていただけないでしょうか
- 618 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 03:58:05 ]
- >>616
_endthreadex()を使えば整数は返せる。
- 619 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 03:58:44 ]
- >>617
C#やJavaと同じだと思うんだけど。なんで違うと思うの?
- 620 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 04:26:56 ]
- win32が名前空間対応してくれればいいのに
- 621 名前:デフォルトの名無しさん [2008/02/14(木) 10:06:21 ]
- vectorを初期化するときに、配列を初期化するみたいに、
vector<int> vec = {1,2,3,4,5,6}; みたいな書き方をする方法はありませんか?
- 622 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:08:44 ]
- >>621
その書き方は現行の C++ ではコンパイルできない。 「みたいな」という幅がどこまであるのかによっては、 似たような書き方ができることもあるけど。
- 623 名前:デフォルトの名無しさん [2008/02/14(木) 10:22:11 ]
- batファイルで、処理の途中でキー入力を求められるとき
どうすれば入力できますか? パスワード入力を自動的に行いたいのです。
- 624 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:32:29 ]
- >>621
>>10
- 625 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:34:51 ]
- 誤爆してしまった…
C/C++でGUIを実装する場合、どういった手段が適当でしょうか?(Windows環境) 色々調べてみたところ ・実際の職業プログラマさんなんかはC#やVB.NETみたいなのを使う ・WinAPIを直接、みたいなことは趣味でやる人が使う (山を登るのに、ロープウェイを使うのが賢いが趣味で山登りを楽しむ人がいるみたいな意味で) で、実際人に聞くと今度はMFCという意見が出てきました 調べるとWinAPIを糖衣したようなもののように感じたものの情報がすごく少ない と、こんな感じでして、どっちに進むべきか悩んでいます やりたいのはどっちだ、というのは手段と目的がryってやつでGUIの実装の手段をどうしたものか、という質問です C#/VB.NETというものも一応考慮のうちに入れておきたいです (GUIの実装はC/C++の枠を超えればそれがベターだから、という意見も考慮したいからです) それではよろしくお願いします
- 626 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:36:58 ]
- >実際の職業プログラマさんなんかはC#やVB.NETみたいなのを使う
業種にもよるけどMFC使ってる職業プログラマも多いよ むしろそっちの方が多いはず MFCの情報が少ないのは調べ方が悪いと思う
- 627 名前:デフォルトの名無しさん [2008/02/14(木) 10:44:20 ]
- template <>の中にかけるのは、classと、typename、それにintだけですか?
- 628 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:46:03 ]
- >>623
スレ立てるまでもない質問はここで 第89刷 pc11.2ch.net/test/read.cgi/tech/1202726651/ SET /P password=
- 629 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:56:59 ]
- >>627
type parameter non-type parameter(intは可 現規格では幾つか制限アリ) template template parameter(デフォルト引数は考慮されないことに注意) の三つがOKだよ。 (例) template<typename T> template<int I> template< template<typename, typename> class C >
- 630 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:59:57 ]
- template<class A, class B> void Foo( B b ){}
という関数があったとき、使う側で Foo<int>( bar ); と引数から特定できない型のみを指定できるのは、 C++において正しい仕様なのでしょうか?VS2005では一応コンパイルが通る ようですが…
- 631 名前:625 mailto:sage [2008/02/14(木) 11:05:33 ]
- >>626
なるほど・・どうにもうまく調べられないようで、ちょっと離れたプログラム関連の本が多い 書店へ行ったのですが、MFCについての本は独習シリーズを書いている方のものが1冊(古い)と その他薄いものが何冊かしかありませんでした それと合わせて情報が少なくマイナーなのかと思ってしまっていました もうちょっとMFCについて調べてみます
- 632 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:08:19 ]
- というかそのプログラム関連書籍が多い書店を教えて欲しいw
- 633 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:23:26 ]
- 池袋にあるジュンク堂ってとこです
大型書店何件か回ったけどあそこが群を抜いて多かったです
- 634 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:30:11 ]
- あそこいいね
立ち読み客のために椅子まで用意されてたし ちょっと前まで近所だったからよく行ってたよ
- 635 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:49:07 ]
- ただちょっと会計が面倒ですよね
一応MFCやってみようと思います、WinAPI知らないままで不安ですが独習シリーズの人の本買ってみようと思います ありがとうございました
- 636 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 12:18:20 ]
- 今更MFC?……
目的にも依るし、ここで続けるのもスレ違いだから詳しくは書かないけれど。
- 637 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 12:19:34 ]
- MFCはこれから落ち込んでいくんじゃないか?.NET系(C#とか)やるべきだと思うの俺だけ?
- 638 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 12:31:40 ]
- 落ち込んでから.NETなり時代に沿ったものに切り替えればいい
目的にもよるけど
- 639 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 12:45:38 ]
- MFCはまあ、最初の枠組みやってくれるのだけあてにして使ったりするな。
- 640 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 13:07:23 ]
- >>621
ttp://www.kmonos.net/alang/boost/classes/assign.html
- 641 名前:デフォルトの名無しさん [2008/02/14(木) 13:28:04 ]
- サブスレッドがデータ更新した事を知るためにはwhileなどで繰り返しチェックする以外にどのような方法がありますか
- 642 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 13:29:25 ]
- >>635
その本は良書だしMFCを少しでも触ったことがあれば難しくはないが、 MFCの情報を探し出せないという検索の腕からいってもお前さんにその本はまだ早い。 というかMFCなんて仕事で必要でない限りは今更初心者が手を出すべきものでもない。
- 643 名前:641 [2008/02/14(木) 13:32:48 ]
- イベントドリブンっていうのはきいたことあるのですが、BCBとかでは無い標準のC言語、C++でどうやるのかわかりません
- 644 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 13:51:27 ]
- >>641
Windowsならイベントオブジェクト、Unixなら条件変数 >>643 標準のC/C++にサブスレッドなんて概念は無いと思うが…
- 645 名前:641 [2008/02/14(木) 14:02:49 ]
- サンクス
- 646 名前:デフォルトの名無しさん [2008/02/14(木) 14:13:28 ]
- CreateEvent() の使い方がわからないので適当なSleepいれてwhileでチェックしようかと思うのですが
CreateEvent()のほうが断然良いですか? たとえば500msとか、100msとか待ったとき CreateEvent()のほうが即時性とCPU負荷低いですか
- 647 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:15:07 ]
- やってみると、それ自体は簡単だからまずやってみろって。
- 648 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:16:31 ]
- 断然良いです
即時性は高いです 負荷は100msも寝るなら大差ない
- 649 名前:デフォルトの名無しさん [2008/02/14(木) 14:18:13 ]
- DLLにしたいんのですが、なるべく負荷を下げたいんです
一つのサブスレッドがデータを受信したらそれを知りたいのですが、間隔は2〜10秒くらいです whileで監視しても変わらないですか
- 650 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:20:42 ]
- 少しでも下げたいならイベントオブジェクトの方がいいんじゃね
通知が来るまで寝っぱなしだし 100msごとに起きるよりは当然
- 651 名前:デフォルトの名無しさん [2008/02/14(木) 14:22:04 ]
- 初心者がわかる文書ありませんか
- 652 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:30:41 ]
- CreateEventの使い方なんか簡単だ。
HANDLE handle; handle = CreateEvent(NULL, FALSE, FALSE, NULL); これで良い。
- 653 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:31:42 ]
- winapiのメリットってなんでsか
- 654 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:34:42 ]
- >>653
何に対するメリット?比較対象は?
- 655 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:41:07 ]
- ウィンドウプロシージャではよくswitchが使われていますが、
ifではなくswitchを使う理由みたいなものがあるんでしょうか?
- 656 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:42:24 ]
- >>655
ifでも書けるから、ためしにifで書いてごらん。 理由がわかると思うよ。
- 657 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:48:20 ]
- int main(void){
for(;;) return 0; } これのコンパイルが普通に通って(´・ω・`)?ってなってるんですが、 ぶら下がり文って次の行でなくても許されてるんですか?
- 658 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:51:34 ]
- 空白文字(改行含む)はいくらあっても構わない形式なのです。
- 659 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:51:35 ]
- for (;;) return 0;
って解釈されてるんだろ
- 660 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:54:21 ]
- >658-659
なるほど、どうもです。 同じ行か、次の行までしか許されないもんだと思いこんでました。
- 661 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:54:45 ]
- >>657
こんなのでも普通にコンパイル出来るよ びっくり? int main( void){ for( ; ;) return 0;}
- 662 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:58:05 ]
- >>661
たぶん、そういうのはわかっちゃいるけど、「ついなんとなく」 ぶら下がり文に対してだけ異なる感覚を持ってしまったんだろう。
- 663 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:01:51 ]
- p
r i n t f ( " t e s t \n " ); でもこれは通らないんだね(´・ω・`)
- 664 名前:641 [2008/02/14(木) 15:02:00 ]
- サンクス できましたよ
#include <iostream> #include <windows.h> #include <process.h> using namespace std; HANDLE handle; unsigned WINAPI fnc(void *x){ int n=(int)x,m; m=3000-n*300; Sleep(m); cout<<n<<"ban "<<m<<"msec Sleep\n\n"; SetEvent(handle);} main(){ handle = CreateEvent(NULL, FALSE, FALSE, NULL); for(int n=0;n<10;n++){ _beginthreadex(NULL, 0, fnc, (void*)n, 0 ,NULL);} while(1){ WaitForSingleObject(handle, INFINITE); cout<<"main reep ga ugoita\n"; }}
- 665 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:05:42 ]
- >>656
if(○○ == WM_xxx) ○○ ==の部分を毎回書かなければいけない事くらいしか思い当たりません。 その代わりbreak(もしくはreturn)がいらないので記述ミスが減るかなぁと。 と書いているうちに一つ思い浮かんだのが、breakを挟まないことで case WM_CREATE: 〜処理1〜 case WM_PAINT: 〜処理2〜 break WM_CREATEがきたときは処理1,処理2をどちらも行うという事が出来ますね。 これがswitchを使う理由ですか?
- 666 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:12:56 ]
- >>665
そもそもswitch文の存在理由を考えてみるといいかと およそほとんどのswitch文はif文で書けるわけだし、 C言語のswitch文って要らないよね、ってのは、 それはそれでひとつの考え方だが…
- 667 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:14:05 ]
- ぶっちゃけswitchでできることはみんなif-elseでできるし、
while、do-whileでできることはみんなforでできる。 選ぶ基準はどっちが見やすいか、書きやすいか。
- 668 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:23:30 ]
- >>630
正しい仕様です。
- 669 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:03:06 ]
- >>668
ありがとうございます。安心して使うことができます。
- 670 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:08:59 ]
- 店で売ってるソフトって大半がMFC製じゃないの?
- 671 名前:デフォルトの名無しさん [2008/02/14(木) 18:49:22 ]
- wchar_tの文字列をcharの文字列に変換したいのですが
char buf[256]; wchar_t wbuf[] = _T("Test123あいうアイウ"); int c; setlocale(LC_ALL,"ja"); wcstombs_s(&c,buf,256,wbuf,256); ではwbufに入っている「Test123」までがbufにコピーされ、それ以降は無視されているようです。 理由を教えていただけませんか?
- 672 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:55:03 ]
- 変換できないワイド文字が検出されたのでその直前で変換を打ち切った
- 673 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:40:47 ]
- "ja"がロケール文字列として有効なのか怪しいな。
単にsetlocale(LC_ALL, "");で試してみたら? あと、本当のワイド文字列リテラルに_Tは使うな。直接L付けろ。 wchar_t wbuf[] = L"Test123あいうアイウ";
- 674 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:54:01 ]
- Windows だったら setlocale(LC_ALL, "japanese"); だったと思う
- 675 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:12:53 ]
- WCHAR
- 676 名前:デフォルトの名無しさん [2008/02/14(木) 21:13:33 ]
- >>672-675
ありがとうございます setlocale(LC_ALL, "japanese"); で解決しました。
- 677 名前:デフォルトの名無しさん [2008/02/14(木) 22:00:06 ]
- ttp://www.uploda.org/uporg1251163.zip.html (展開時9.7KB程度)
Windowsゲーム向けタイマクラスを作ってみたんですが (1/60秒休んで累積の休憩時間からfpsや簡易CPU率を取得する機能) どうにも少しでも負荷がかかるとWindowsタスクマネージャで見てると まだまだCPUが余裕な割に53fpsくらいに落ち込んでしまいます。 もうすこし改良したいと思うのですが、どこか改良の余地はありますでしょうか?
- 678 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:05:20 ]
- タイマーをパワーアップ
- 679 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 00:55:33 ]
- >>677
あまり詳しく見てないけど、 Sleepが1/60秒以上帰ってこないことが7回/秒あったら53fpsになるのかな? Sleepの精度なんてそんなもんだし。 理論値どおりに増加するフレームカウンタを作り、 実際に処理できたフレーム数がそれに追いついたら休む、 追いつくまでは休まず連続して何フレームでも処理する、 とすれば、平均のfpsは理論値と合う。
- 680 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 00:57:29 ]
- こんな感じで見やすくC++の標準関数載せてくれてるサイトありませんか?
ttp://cham.ne.jp/piro/p_stdfunc.html
- 681 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:03:00 ]
- ttp://www.cppll.jp/cppreference/
- 682 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:15:08 ]
- >>679
「どうしても追い付けなければスキップすることも辞さない」も入れとくべきではないか?
- 683 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:17:05 ]
- バイナリファイルについての質問です。
とあるバイナリファイルの中に、12ビット単位でひとつの要素となるデータが99バイト分入っています。 これを3バイトずつファイルから読み出して12ビット単位で区切り、short型に変換して 再度バイナリファイルに書き出したいと思っています。 この場合、バイナリモードでファイルを開いて、char data[3]にread関数で3バイト格納しても シフト演算子が使えないため、上手く12ビット単位でデータを取得することができません。 何か良い案ないでしょうか?
- 684 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:24:09 ]
- >>683
「シフト演算子が使えない」と思い込む根拠は? まぁ、環境依存上等でビットフィールドを使うか、自前でビット演算するかの違いだけどね。
- 685 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:24:18 ]
- やり方は色々あるけど、とりあえず3byte読んでから4byteの整数に格納sすれば?
- 686 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:27:43 ]
- >>683
short a1 = (unsigned short)data[0] << 4 | (unsigned short)data[1] >> 4; // 前半12bit short a2 = (unsigned short)data[1] << 8 | (unsigned short)data[2]; // 後半12bit これでだめかや?
- 687 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:31:54 ]
- 訂正
short a1 = (unsigned short)data[0] << 4 | (unsigned short)data[1] >> 4; // 前半12bit short a2 = (unsigned short)(data[1] & 0x0f) << 8 | (unsigned short)data[2]; // 後半12bit
- 688 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:33:49 ]
- a1とa2もunsigned shortでいいと思う。
俺の個人的嗜好だけど。
- 689 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:38:19 ]
- a1, a2はunsigned shortにすべきだな。
それはそうと、 a1 <- data[0].u data[0].l data[1].u a2 <- data[1].l data[2].u data[2].l って並びなのかな。 a1 <- data[1].l data[0].u data[0].l a2 <- data[2].u data[2].l data[1].u って並びの可能性もありそうだが。
|

|