2016-09-20 27 views
-2

私はJavaスイングフレームを使用してデスクトップアプリケーションを持っています。私は、RubyまたはPythonのいずれかにアプリケーションを書き直さなければならない。しかし、私はある程度のJavaを理解しています - 私はJavaのコードの特定の部分を書き直す手助けが必要です。RubyへのJavaバイト配列

1.

byte[] ModuleGuid = new byte[]{ 
     (byte)0xe1, (byte)0x9a, (byte)0x69, (byte)0x01, 
     (byte)0xb8, (byte)0xc2, (byte)0x49, (byte)0x80, 
     (byte)0x87, (byte)0x7e, (byte)0x11, (byte)0xd4, 
     (byte)0xd8, (byte)0xf1, (byte)0xbe, (byte)0x79 
}; 

2.

JAVA_PvAPI_SensorInfoEx[] lptSensorInfo = 
     new JAVA_PvAPI_SensorInfoEx[(int)PsConstant.JAVA_PvAPI_GET_SENSOR_INFO_MAX]; 
+0

ポートコードの助けを借りて私たちにお尋ねします。あなたはその仕事をする必要があります、そして、あなたが問題に遭遇したときに、その特定の問題について質問してください。 –

答えて

2
  1. Rubyでbyteのようなものはありません。あなたはバイト列を保存したいときは、文字列に格納します。

    module_guid = "\xE1\x9A\x69\x01...".force_encoding('ASCII-8BIT') 
    

    は、Javaコードからコピー&ペーストする場合は、使用します。

    module_guid = [0xe1, 0x9a, ...].pack('c*') 
    

    ちなみに、I Rubyで大文字の識別子が定数用で、Javaコードにfinalというキーワードがないため、変数をModuleGuidと宣言していませんでした。

  2. Rubyの配列は単なる配列です。彼らはあらゆる種類のオブジェクトを格納することができます。 Rubyにはint[]またはString[]またはWhatever[]はありません。 Ruby配列は固定サイズではなく、いつでも展開または縮小できます。 Rubyであなたは配列を取得するにはすっごく多くの方法を持っているので、あなたのユースケースに応じて、この文自体は必要ではないかもしれない、

    sensor_info = [] 
    

    しかし:Javaコードのあなたの2枚目のように書き換えることができます。

+1

私は 'module_guid =" \ xE1 \ x9A \ x69 \ x01 ... "と言っています。force_encoding( 'ASCII-8BIT')'。一方、 'pack( 'c *')'はすでに正しいことをしています。 – Amadan

+0

@Amadanこれは愚かな質問かもしれませんが、私がエンコードを強制しないとどうなりますか? – Aetherus

+0

例えば、 '' \ xE6 \ x97 \ xA5 ".length'はUTF-8(デフォルトのエンコーディング)の1文字なので' 1'です。 – Amadan

関連する問題