- ベストアンサー
ビッグエンディアンProgramの単体テスト
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 クロス環境でのエミュレータではありませんが、 以前の会社で開発した環境でPowerPC版のNTを使ったことがあります。ARC互換RISC(Alpha,MIPS,PowerPC等が該当)用として売られていて、某M社ご担当様から聞いた話では、そもそもPowerPC版のNTはMac用のIE等を開発するためにあるのだとか。 マシンは最初はMac Quadraを改造して使っていて、あまりにもいい加減だったので途中からひそかに入手した聞いたことも無いDEC/Intel合作の不思議なPowerPCマシンになりました。 余談ですが、その約2年後にIntelがDECのAlphaCPU工場を買収したニュースが社内を飛び交います(謎)。 このNTはAPIから隅々までBigEndianです。 NTでVCを動かすとPowrPCのアセンブラダンプが見れるので『WindowsでMacが動いているぜ!』と感心した印象が残っています。 当時はVisualStudio4.2で開発を始めちょうどVC6.0が出たころに開発が終わりました。 ただエミュレートするターゲットが移動機(携×電×系です^^;)だったのですがNTでそのまま普通に動かすという訳には行かず、やっぱりベースとなる枠が必要でしたので私たちはそれも自前で開発したものが、 現在の某携×電×メーカーのMAC版エミュレータです。 秘匿義務でこれ以上言えません。すみません(泣)、 PowerPC対応のNTはARC互換NTとしてWorkstationでもServerでも未だに製品そのものは売られています。 SDKはMSDN経由で入手できるだろうと思います。 この辺までしかアドバイスできませんが お役に立つと幸いです。 ご参考までに。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4845/10255)
回答ではありませんが、エンディアンの違うクロス開発をするなら普通はエンディアンに依存しないようにコーディングするのではないでしょうか?htonl,htons,ntohl,ntohs等を使って。
補足
なぜこのようなことを聞いているかを以下に補足します 現在開発するソフトのベースソースがビッグエンディアンで作成されています ターゲットもビッグエンディアン(PowerPC)です。 ICEなどでデバッグするという方法もありますが ソフト単体のテストであればWindowsPC上で行い効率を上げたいと考えました (複数人で開発するため,全員のICE+ターゲットを渡すことができません) 自分が調査した限りだとWindowsPC上の開発環境(VC Cビルダーなど)は,あくまでリトルエンディアンでしか出来ないようです WindowsPC単体上で動くPowerPCのエミュレーター等があればベストなのですが だれか知っていましたら御教授願います。
関連するQ&A
- リトルエンディアン、ビッグエンディアンについて
リトルエンディアン、ビッグエンディアンについて 質問があります。 (1)簡単にそのPCがリトルエンディアンなのか、ビッグエンディアン なのか、分かる方法はありますか? 簡単なCプログラムを書いてメモリ状態をダンプするのが、 一番早いのでしょうか? それとも、Intel系?モントローラ系?CPUにはあまり詳しくないので、 分かりませんが、これらのどちらかに属していれば決められるので しょうか?ほかの系とかあるのかな・・・ (2)ネットワークプログラミングをするときに、ビッグエンディアンの マシンからデータを送出する場合には、htonlなどの関数を使用しなく ても問題ありませんでしょうか?(ネットワークバイトオーダが ビックエンディアンであるため)
- ベストアンサー
- C・C++・C#
- 単体テストを自分でも組めるのか?
単体テストを自分でも組めるのか? C++でOOPに挑戦しているんですが、CppUnit?とか全くわからないのですが 単体テストの概念は分かるのです。 自分はC++の経験が浅く使いこなすようになったばかりの新参者なんです。 この状態で単体テストというものを用いてプログラムを組むことは可能なんでしょうか? もしくは開発効率は上がるんでしょうか?
- ベストアンサー
- C・C++・C#
- 最近のCPUのほとんどはリトルエンディアンかビッグエンディアンでしょうか?
2000年あたり以降に出た Windows, Mac, Linuxに使われているCPUのほとんどはリトルエンディアンかビッグエンディアンでしょうか? また、たとえば以下のような方法でエンディアンを調べられると考えていいのでしょうか?(VC++です) #include <windows.h> void GetEndian4(char* c){ unsigned __int32 a=0x03020100; BYTE *b = (BYTE*)&a, i=4; while (i--) c[i]=b[i]; } ////////// const char e[4]={}; GetEndian4( const_cast<char*>(e) ); //eが 0,1,2,3 になればリトルエンディアン //3,2,1,0 になればビッグエンディアン //PDP-エンディアンだと 2,3,0,1 …のはず (または2択ならこれだけでも判断可能…?) short s=1; printf( *(char*)&s ? "リトルエディアン\n" : "ビッグエディアン\n" ); あとここでもアラインメントの問題が絡みますが、このように アラインメントが(2のべき乗だとして)大きいであろう方から小さいであろう方にキャストする分には安全で、逆に sizeof(short) == sizeof(char)*2 として char c[2]={1,0}; short s=*(short*)&c; というのは危険な場合がある、ということでしょうか? また、その場合は たとえばビッグエンディアンなら short s=(c[0]<<8)|c[1]; とすればいいでしょうか?
- ベストアンサー
- C・C++・C#
- ビックエンディアンで動作するPC
バイトオーダでビックエンディアンとリトルエンディアンがあるのは知っていますが、 実際にビックエンディアンで動作するPCを見たことがありません。 (といいますかビックエンディアンで動作しているか分かりません) 秋葉原等でビックエンディアンで動作するPC(CPU・マザーボード)は買うことはできるのでしょうか? その場合のOS、Linuxになると思いますがディトリビューションどれがよいのでしょうか? クロスコンパイル環境に興味があり、エンディアンが違うPCでも動作するプログラムを 書いてみたいと興味があり質問させていただきました。
- ベストアンサー
- その他(パソコン)
- ビッグ/リトルエンディアンについて
現在、ワークステーション(SPARC+Soralis)上でFortranで書かれたプログラムがあります。 それをPC(x86+WindowsXP)の環境へ移行した所、Fortran記録(バイナリ)の内容が、CPUアーキテクチャの絡みでビックエンディアン/リトルエンディアンの問題が発生し、苦労しています。 Windows側で使用しているFortranコンパイラは「富士通 Fortran&C Packege V4.0」です。 PC側でまともにワークステーションのバイナリファイルを読みたいのです。 どなたか対策をご存じの方がいらっしゃいましたら、ぜひ、ご教授ください。 よろしくお願いいたします。
- 締切済み
- その他(ITシステム運用・管理)
- ビッグエンディアンをPCで処理する問題
ビッグエンディアンと指定されているバイナリファイルがあります。 これをPC(intel系,Linux or Windows)で処理する場合、エンディアンの変換が必要だろうと思います。具体的にはどのようにするのでしょうか。ネットでもダウンロードできそうですが。 変換コマンド -btol ファイル名(ビッグ)> ファイル名(リトル) という感じですかね。こんなものあるでしょうか。 購入したバイナリファイルなのですが、このご時勢たいていPCで処理するわけでしょうからリトルであってほしいものだと思いますが。 ところでMACはビッグとリトルのどっちなのでしょうか。
- 締切済み
- その他(プログラミング・開発)
- C#での単体テストの置き場
VisualStudioExpressをインストールしてC#の開発を始めました 標準で単体テスト機能を持っていないので NUnitを導入してみましたが C#の慣習ではテストのファイルというのはどこに置くものなのでしょうか? 普段はrubyでWebアプリを作っているのですが アプリケーション周りはほとんど知らない人間です
- ベストアンサー
- その他(プログラミング・開発)
- エンディアン:2バイトのデータをShort intにしたいのですが?
1.Intelの CPU リトルエンディアンでの、問題です。 バイナリファイルをバイト単位で読込み、これを16ビットの整数にしたいのですが、以下のようにコーディングしましたが、うまくいきません。解決方法をご教示下さい。 char s[2]; short int x; // 16ビットの整数です // s[0] s[1]に、データを読み込みます。 x = (short)(s[0] + 256 * s[1]); 2.同様の問題で、ビッグエンディアンの場合は、どうすればよいかも、ご教示下さい。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 【C言語】単体テストのイメージが全くつかない
閲覧ありがとうございます。 C言語での改修案件に携わっているのですが、当方C言語も開発も経験のないものでして、単体テストについてお伺いしたいです。 システムBの単体テストをしたいとします。 システムBは、別サーバにあるシステムAからソケット通信で電文を受け取り、同サーバにあるシステムCにメッセージキューで電文を送ります。 また逆に、システムCからメッセージキューで電文を受け取り、システムAにソケット通信で電文を送ることもあります。 基本的にデータの中継を担うシステムです。 このとき、一体システムBの単体テストはどのような項目をやるのが正しいのでしょうか? (※CUnit等は使えません) JavaはJUnitを使っての単体テストの学習はしたことがあるのですが、C言語での単体テストの項目もやり方も全く想像がつきません。 私にPGの才能がないことは重々承知しておりますので、出来れば分かりやすくお教えいただければ幸いです。 よろしくお願いいたします。
- 締切済み
- C・C++・C#
- Linuxのバージョンが多数あるのですが
LinuxのDebianを使おうと思うのですが http://www.debian.org/releases/stable/ ここで •Alpha •64-bit PC (amd64) •ARM •EABI ARM •HP PA-RISC •32-bit PC (i386) •Intel Itanium IA-64 •MIPS (ビッグエンディアン) •MIPS (リトルエンディアン) •PowerPC •IBM S/390 •SPARC とバージョンらしいものがあるのですが このバージョン一つ一つの説明などが書いてあるサイトなどはありませんでしょうか?
- ベストアンサー
- Linux系OS
お礼
ご丁寧な回答ありがとうございます。 早速調べてみますありがとうございました。