• 締切済み

Cの構造体のデータのbyte配列をjavaのclassに入れるには

サーバーからCの構造体のデータをbyte配列で受け取ったものをjavaのclassに入れるにはどうすればよいでしょうか? クライアントプログラムがCなら受け取ったデータをそのまま構造体にコピーすれば終わりなのですが(サーバーもクライアントもx86なのでendianを気にする必要が無い)、java で簡単に書く方法が分からないので、今はbyte配列から1バイトづつ読みだして、classのメンバーに代入しています。もっとスマートな書き方はないでしょうか?

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

noname#208124
noname#208124
回答No.1

JNIでCにやらせればいいんじゃないでしょうか

moritan2
質問者

お礼

ご回答ありがとうございます。 しかし、機能を実現するだけなら、今のbyte配列を自分で読みだしてメンバーに代入する方法でできてはいるので、たとえばperl の unpack のようなもっと楽にできる方法を探しています。 JNIでは「スマートな書き方」とはちょっと言えないかと。 あと、書き忘れましたが、実効環境はDoCoMo imode用javaです。

関連するQ&A

  • Javaには、構造体はないんですか?

     C言語の構造体みたいなのはないんですか? 野球のデータを扱っているのですが、構造体がないのでできません。 打率の順位をソートしたいのですが、Cでは構造体でソートすれば選手名まで全部ソートできたのですが。。。 Javaでは、いちいち選手名、打率などの配列を作っているのですが、打率をソートしてから選手名と一緒に表示しようとしても打率の配列だけ、ソートしてあり選手名の配列と打率の配列があいません。 要するに、打率の配列はソートし、選手の配列はデータを入力したときのままなので、順番が違っているのです。 うまい方法を教えてください。初歩的な質問でごめんなさい。

    • ベストアンサー
    • Java
  • C#の構造体に関して

    C#の構造体に関して C#で構造体で配列を持ちたいと思い、宣言の仕方や使い方を 勉強していますが、どうしてもコンパイルは通るもののエラーと なってしまいます。 《ソース》 単純に構造体で宣言した"a"という配列に、"ABC"という文字列を 代入したいだけですが。。。 namespace テスト環境 { struct test { public string []a; } class Program { static void Main(string[] args) { test aaa = new test(); aaa.a[0] = "ABC"; } } } 配列の初期化等は、ようやく理解したつもりではいますが、構造体 が絡むとどうしてもわかりません。 どこをどのように修正したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • データ数の多い構造体配列について

    visual c++で配列をメンバーに持つ構造体配列を定義したいと思っています。 しかし、以下のように定義してもプログラムが実行されません。 配列の容量が大きいのかもしれませんが、 大量のデータを扱いたいので容量を小さくはしたくありません。 大量のデータを扱うのに何かいい方法はないでしょうか。 struct X { double A[1000]; }; : : : struct X B[10000];

  • JavaからC構造体にパケット通信する方法

    ネットワークプログラミングの初心者です。 現行のシステムがC言語で実装されているUDP送受信アプリに対して、 この度、Javaクライアントでも連携をおこなうことになりました。 しかし、現行のシステムはクライアントとサーバ間でC構造体をUDPにて送受信しています。 JavaでC構造体と同様のデータを作成しUDP送信、またサーバからUDP受信したデータをJavaで使用できる型変換する方法はありますでしょうか。 JNIやJNAを使用しない方法で、ご教授いただけますでしょうか。 以下にC構造体の例を記載いたします。 typedef struct udp_data { long b_type; long a_type; char userid[128]; char passward[128]; } UDP_DATA;

    • ベストアンサー
    • Java
  • C#で構造体の配列を持った構造体を使いたいのですが

    C#で構造体の配列を持った構造体を使いたいのですが Cならば struct xyz { struct abc _abc[32]; int index; }; struct abc { int a; int b; int c; }; struct xyz _xyz[8]; xyz[0]._abc[3].b = 1; のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません うまくやる方法をどなたかご存知ないでしょうか Visual Studio 2005行った場合 コンパイルで 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します となり fixed をつけると 固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double となってしまいます

  • C++、クラスメンバの構造体配列の初期化について

    クラスのメンバに構造体の配列を持っていて、その構造体はfloat値を4つ持ってます。 私はいつもメンバ変数の初期化はコンストラクタでしています。 クラス生成時に全てのfloatを0で初期化したいのですが、これはコンストラクタでfor文を回すしかないのでしょうか? 一文で初期化することは出来ないのでしょうか? 話は少し変わってしまいますが、今思ったのですがコンストラクタで値を決めるのは初期化じゃなくて代入と呼ぶのですかね? ご助力よろしくお願いします。

  • C,C++,C++/CLIの構造体とクラス

    C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが privateかpublicかという違い「だけ」しか全くないのでしょうか? クラスにおける value class / ref class という分類はC++/CLIのもので これについては value class の方は C言語の構造体に近いという事でいいでしょうか? ref classの方は ネイティブのC++のクラスを マネージ用にしたようなもので C++/CLIの構造体は C++のそれと同じで OKですか? そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?

  • C言語の構造体をpythonでやりたい

    現在ラズベリーパイでpythonでTCPクライアントを作っています。 現在サーバーに次のようなパケットを送信したいと思っているのですが、このC言語の構造体を同じバイト数で出力するようにpython言語にすることは可能でしょうか? どうぞ、ご教示いただきますよう、宜しくお願い致します。 typedef struct _PAYLOAD_ALIVE_ { BYTE MacAddr[6]; WORD Port; BYTE Relay; BYTE Set; BYTE AliveTime; BYTE SensorLen; BYTE Mail[40]; WORD Model[20]; BYTE testArea[4]; BYTE SWVer[4]; BYTE testSensor[16]; }PL_ALIVE;

  • javaのbyte配列へintなどを埋め込む方法

    javaのbyte配列へintなどを埋め込む方法 java初心者です。データ編集がわからなくて悩んでいます。 下記のコードは"棒読みちゃん"といソフトへのTCPパケットを作成するコードです。 char buf[15]; *((short*)&buf[0]) = 0x0001; *((short*)&buf[2]) = speed; *((short*)&buf[4]) = tone; *((short*)&buf[6]) = volume; *((short*)&buf[8]) = voice; *((char* )&buf[10]) = 2; *((long* )&buf[11]) = len; 同じことをJAVAでしたいのですがわかりません。 (バイト型配列へint,long型を簡単に埋め込む方法がわかりません) よろしくお願いします。 よかったら、こちらもお願いします memcpy(&buf[15],message,strlen(messege)); TCPパケットのようなデータ処理が頻繁にある場合、 このようなコードは、どうしたらいいでしょうか? *((unsigned char* )&buf[15]) = message; CとJAVAになってますが、このような処理を簡単に書けないでしょうか?

    • ベストアンサー
    • Java
  • byte配列をImageに変換する

    現在Javaでネットワーク越しに画像データを送るプログラムを書いているのですが、byte配列に変換した画像データを、元の画像データに戻せなくて困っています。 もう少しプログラムよりにかくと、BufferdImageをbyte[]には変換できますが、逆ができません。 何かよい方法はないのでしょうか?お返事お待ちしております。

    • ベストアンサー
    • Java

専門家に質問してみよう