不知道如何標註該問題,請原諒我。從存儲的標誌枚舉值中獲取整數數組
我正在使用Aforge.Controls.Joystick存儲遊戲板按鈕組合爲一個整數。 IT使用Flag Enumerator作爲按鈕(例如按下) - 例如,按鈕1返回小數點1,按鈕2小數點2和按鈕1和2一起3(2 + 1)。
我將這個小數存儲在一個ini中用於另一個類。我需要做的是在另一個類中檢索這個小數,並構造一個按鈕被按下的整數數組(基本上,哪些位是true/1)。一些例子:
檢索十進制:3 返回:1,2-
十進制檢索:16 返回:5
十進制檢索:22個 回報:5,3,2
我知道我錯過了一些非常明顯的東西,但迷失在所有的概念(例如按位,國旗枚舉等)等
希望有任何幫助...
EDIT1:以下評論:
必須使用ini作爲在應用程序運行之間存儲此值。
繼混亂,遊戲杆枚舉會是這個樣子:
<Flags> Public Enum Pets
Button1 = 1
Button2 = 2
Button3 = 4
Button4 = 8
Button5 = 16
End Enum
因此, 「22」 將按鈕5,3和2(16 + 4 + 2)
EDIT2:以下回復1
嘗試:
Imports AForge.Controls
Imports AForge
Dim txt = "22" ' value from "ini"
' parse back into an enum
Dim ButtonsPress As Joystick.Buttons = CType([Enum].Parse(GetType(Joystick.Buttons), txt), Joystick.Buttons)
Dim picks = [Enum].GetValues(GetType(Joystick.Buttons)).
Cast(Of Joystick.Buttons).
Where(Function(q) ButtonsPress.HasFlag(q)).
ToArray()
For Each v As Joystick.Buttons In picks
Console.WriteLine(v.ToString())
Next
但是,它不會編譯:
'HasFlag' is not a member of 'AForge.Controls.Joystick.Buttons'
然而,當我在對象瀏覽器中查看Joystick.Buttons,總結如下: 「操縱桿按鈕的標誌枚舉。」
不解......
EDIT3 - 解決的意見
答案組合及以下回答。要獲得具體的數字後面按原來的問題:
Dim txt = "22" ' value from "ini"
Dim ButtonsPress As Joystick.Buttons = CType([Enum].Parse(GetType(Joystick.Buttons), txt), Joystick.Buttons)
Dim picks = [Enum].GetValues(GetType(Joystick.Buttons)).
Cast(Of Joystick.Buttons).
Where(Function(q) (ButtonsPress And q) = q).
ToArray()
For Each v As Joystick.Buttons In picks
Console.WriteLine(v.ToString().Remove(0, 6))
Next
產地:
2
3
5
十進制:16返回:5 十進制:22返回值:5,3,2這是沒有意義的。說明。那你爲什麼用ini?如果您想稍後存儲信息或每次軟件初始化,那麼這就很好。看起來不像你的情況。爲什麼不將這些整數存儲在數組中並將數組傳遞給其他類中的方法? – Claudius
而不是寫入文件來傳遞數據,只是傳遞類型化的數據。那麼你可以測試它,因爲它的意思是使用 – Plutonix
不確定它沒有意義,Claudius - 請參閱上面的edit1。總的來說,我需要將十進制值存儲在ini中以供以後檢索。如果可以實現解決方案,我可以在第二個類中包含AForge庫以訪問枚舉器。 – stigzler