16進数をビットデータにしたいのですが、
過去ログを見たのですが良く分かりません。
教えて下さい!
あなたの言うビットデータとは?
ついでに値と進数表記が混ざってませんか?:
http://www.amy.hi-ho.ne.jp/~lepton/program/p3/prog363.html
開発環境が書かれていないので、現行バージョン(VB2005)と仮定して回答。
Public Module Module1
Public Sub Main()
'変換元となる、4桁の16進数文字列
Dim hexText As String = "FEDC"
Console.WriteLine("16進数表現: " & hexText)
'&HFFFF に相当する整数を取得
Dim value As Short = Convert.ToInt16(hexText, 16)
'2進数文字列として取得
Dim binText As String = Convert.ToString(value, 2)
Console.WriteLine("2進数表現: " & binText)
'ビット配列として展開
Dim Bit16 As New BitArray(BitConverter.GetBytes(value))
For P As Integer = 15 To 0 Step -1
Console.WriteLine("ビット位置{0,2} : {1}", P, Bit16(P))
Next
Console.Write("Hit Enter Key...")
Console.ReadLine()
End Sub
End Module
データ(@FAOOOOO010100000FA0*Chr(13))をMid()を使って0FA0にしています。
環境は、VB 6.0です。
> 環境は、VB 6.0です。
そういう事は先に書きましょう。
それに、先に回答者からの逆質問にも答えないと。(^^;
>> あなたの言うビットデータとは?
で、そのビットデータとやらを、どのような形式で取得したいのかは
わかりませんが、16進数=>2進数に関しては、下記の16 パターンしかなく、
0 => 0000
1 => 0001
2 => 0010
3 => 0011
4 => 0100
5 => 0101
6 => 0110
7 => 0111
8 => 1000
9 => 1001
A => 1010
B => 1011
C => 1100
D => 1101
E => 1110
F => 1111
あとはそれを桁数分だけ繰り返すだけなので、難しい計算を行わずとも、
If や Select Case による単純な条件分岐だけでも十分に記述できますよね。
すみません。Xビット目が0か1取得したいです。
文字のアスキーコードを取って、それを2で割った余りが答えです。
つまり、16ビット目なら該当文字のアスキーコードを2で1回、
つまり、15ビット目ならを2で1回割った余りをさらに、2で割ります
失礼
>つまり、15ビット目ならを2で1回割った余りをさらに、2で割ります
1回割った余りではなく、商を2で割ります
過去ログからここまでは出来たのですが、
2進数をMid()を使って分割すると0が""になってしまいます。
どうして0にならないのですか?
Dim a As String
Dim lData&, lCnt As Long
Dim sData$, sBuff As String
sBuff = a
Do Until (Len(sBuff) = 0)
'4ビットずつ変換
lData = Val("&H" & Right$(sBuff, 1))
sBuff = Left$(sBuff, Len(sBuff) - 1)
For lCnt = 0 To 3
sData = -((lData And (2 ^ lCnt)) <> 0) & sData
Next
Loop
何か色々やっている間に出来ました。
皆さん有難うございます。
これじゃ駄目?
nはチェックしたいフラグの位置 checkVはチェックしたいフラグの値
Private Function getflag(n As Byte, checkV As Long) As Boolean
Dim V As Long
V = 2 ^ (n - 1)
If checkV And V Then getflag = True
End Function
ツイート | ![]() |