3

LuaテーブルをC#バイト配列に変換しようとしています。次のように機能するDouble配列への変換を取得できました。

> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Double[4]
> dbl_arr:GetValue(0)
> dbl_arr:GetValue(1)
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
0
0
0
0
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
11
22
33
44
>

ただし、を配列( )に変更するdbl_arrと、次のエラーが発生します。Bytedbl_arr = Byte[4](error object is not a string)

運が悪かったので、いろいろなことを試しました。どんな助けでもいただければ幸いです。

アップデート:

これを行うことで、エラーからもう少し多くの情報を得ることができました。

suc,err = pcall(function() byte_arr:SetValue(12,0) end)

Nowsucはfalseでありerr、次のメッセージを返します。

SetValue failed
System.ArgumentException: Cannot widen from source type to target type either
   because the source type is a not a primitive type or the conversion cannot
   be accomplished.
at System.Array.InternalSetValue(Void* target, Object value)
at System.Array.SetValue(Object value, Int32 index)

ここからluaforwindowsをインストールしました。バージョン5.1.4-45です。Microsoft WindowsXPProfessionalバージョン2002ServicePack3を実行しています

アップデート:

これはサンプルコードであり、エラーが発生する場所です

> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Byte[4]
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end <-- Error occurs here
4

2 に答える 2

0

この問題の回避策を見つけました。上記がうまくいかない理由はまだ気になりますが、ここに投稿します。

回避策は次のとおりです。私は基本的にaを作成しMemoryStream、関数を使用しWriteByteて値をバイトに強制します(関数のオーバーロードがないため、バイトのみを受け入れます)。次に、からToArray取得するために呼び出します:byte[]MemoryStream

> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> mem_stream = MemoryStream()
> for i,v in ipairs(tbl) do mem_stream:WriteByte(v) end
> byte_arr = mem_stream:ToArray()
> for i=0,byte_arr.Length-1 do Console.WriteLine(string.format("%d", byte_arr:GetValue(i))) end
11
22
33
44
于 2011-09-06T17:00:26.737 に答える
0

その理由は、Console.WriteLineをとる過負荷がないためだと思いますByte

私はLuaについて十分に知りません-C#では、GetValue(i).ToString() またはConvert.ToString(GetValue(i), 16)を呼び出して、その呼び出しの結果をに渡しますConsole.WriteLine

編集-コメントによる:

次に、バイトに変換する必要があります-C#では、次のようなことを行います-これがどのように行われるdbl_arr:SetValue((Byte)0,4)dbl_arr:SetValue((Byte)v,4)はわかりませんLua。

編集2-コメントによると:
doubleは8バイト、Single/floatは4バイトです。

于 2011-08-24T04:57:01.550 に答える