|
■No99425 (たろー さん) に返信 > 魔界の仮面弁士さんの方法も試してみたのですが、
どのバージョンの Visual Basic をお使いですか? また、ターゲット フレームワークの .NET バージョンは何でしょうか。
最新の Visual Studio 2022 であっても、.NET Framework 4.6.2 以下では動きません。 .NET Framework 4.7 / 4.7.1 / 4.7.2 / 4.8 であれば動くはずです。
もしも .NET 4 〜 4.6.2 をお使いの場合は、 'ValueTuple 構造体を返す実装(要 .NET 4.7 以降) Private Function BitSplitter(a As Byte, b As Byte, c As Byte) As (Left As Byte(), Right As Byte()) Return ({a, CByte(b And &HF0)}, {CByte((b << 4) Or (c >> 4)), c << 4}) End Function から、 'Tuple クラスを返す実装(要 .NET 4 以降) Private Function BitSplitter(a As Byte, b As Byte, c As Byte) As Tuple(Of Byte(), Byte()) Return Tuple.Create({a, CByte(b And &HF0)}, {CByte((b << 4) Or (c >> 4)), c << 4}) End Function に変更してみてください。
Tuple に変更した方の実装では、メンバー名が .Left / .Right から .Item1 / .Item2 に変化します。
VB.NET 2003、2005、2008 などのように、Tuple すら使えない環境の場合は、 'ジャグ配列で返す実装 Private Function BitSplitter(ByVal a As Byte, ByVal b As Byte, ByVal c As Byte) As Byte()() Return New Byte()() {New Byte() {a, CByte(b And &HF0)}, New Byte() {CByte((b << 4) Or (c >> 4)), c << 4}} End Function などとして、 Dim q As Byte()() = BitSplitter(&HAB, &HCD, &HEF) Dim l As Byte() = q(0) 'AB-C0 Dim r As Byte() = q(1) 'DE-F0 のようにしてみてください。
さらに VB.NET 2002 まで遡る場合は、ビットシフト演算子を乗除算に置き換える必要があるでしょう。
|