2011-08-23 5 views
3

Lua 테이블을 C# 바이트 배열로 변환하려고합니다. (error object is not a string)테이블을 바이트 배열로 변환

I : 그러나

> 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_arrByte 배열 (dbl_arr = Byte[4]), 나는 다음과 같은 오류 얻을로 변경하는 경우 : I는 다음과 같이 작동하는 두 배열에 변환을 얻을 수 있었다 행운을 빌어 다른 것들을 잔뜩 시도했습니다. 어떤 도움을 주시면 감사하겠습니다.

업데이트 :이 작업을 수행하여 오류에서 좀 더 많은 정보를 얻을 수 있었다

:

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

이제 suc은 거짓이며, 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) 

here에서 luaforwindows를 설치했습니다. 버전 5.1.4-45입니다. 나는 마이크로 소프트 윈도우 XP 프로페셔널 버전을 실행하는거야 2002 서비스 팩 3

업데이트 :

이 예제 코드는 에러가

> 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 
+0

경우'에서 오는 dbl_arr'는 무엇입니까? –

+0

@Nicol - 내가 만든 Double 배열입니다.'dbl_arr = Double [4]' – SwDevMan81

+0

충분히 정교합니다. 나는 Double [4]의 출처를 의미했다. []를 사용하여 객체를 만드는 데 일종의 metatable을 사용하고 있습니까? –

답변

0

이 문제의 해결 방법을 발견했습니다. 여기에 글을 올리 겠지만, 왜 내가 이상하게 작동하지 않는지 궁금하다.

해결 방법은 다음과 같습니다. 기본적으로 MemoryStream을 만들고 WriteByte 함수를 사용하여 값을 Byte로 강제 설정합니다 (함수 오버로드가 없으므로 바이트 만 허용). 그럼 난 MemoryStream에서 byte[]를 얻을 수 ToArray 전화 :

> 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 
0

발생 어디 이유는 Console.WriteLine가하는 의심 과부하가 없으면 Byte 걸립니다.

나는 루아에 대해 충분히 모른다. 나는 GetValue(i).ToString()이나 Convert.ToString(GetValue(i), 16)을 호출하고 그 결과를 Console.WriteLine이라고 부른다.

편집 - 코멘트에 따라 :

는 그런 다음 바이트로 변환 할 필요가 - C#에서 내가 dbl_arr:SetValue((Byte)0,4) 또는 dbl_arr:SetValue((Byte)v,4)처럼 뭔가를 할 것 -이이 루아를 수행하는 방법을 모른다.

편집 2 - 코멘트에 따라 : double
8 바이트, Single/float는 4 바이트입니다.

+0

그 대답을 위해, 나는 'SetValue'를 시도하기 위해 for 루프를 실행하는 동안 오류가 발생했음을 언급해야합니다. 0을 모두 인쇄 할 것이지만'dbl_arr : SetValue (0,4)'와 같은 것을 시도하면'(오류 객체가 문자열이 아닙니다.) '메시지가 나타납니다. – SwDevMan81

+0

ok - 내 편집을 참조하십시오. – Yahia

+0

예, unfortunetly 거기 캐스팅하는 방법은 없습니다. 나는'Convert.ToByte (4)'를 시도하고 그것을 넘겨 썼지 만 여전히 실패한다. 중간 결과를 Lua '숫자'로 저장하는 느낌이 들었습니다. 그러면 자동으로 C#'Double'으로 변환됩니다. 이 오류를 기반으로 생각해 낼 수있는 유일한 설명입니다. – SwDevMan81

관련 문제