FFFF→ビットデータの算出をするには?

解決


紙コップ  2006-09-03 01:30:13  No: 133051

16進数をビットデータにしたいのですが、
過去ログを見たのですが良く分かりません。
教えて下さい!


ガッ  2006-09-03 01:42:36  No: 133052

あなたの言うビットデータとは?

ついでに値と進数表記が混ざってませんか?:
http://www.amy.hi-ho.ne.jp/~lepton/program/p3/prog363.html


魔界の仮面弁士  2006-09-04 02:53:58  No: 133053

開発環境が書かれていないので、現行バージョン(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


紙コップ  2006-09-04 19:12:13  No: 133054

データ(@FAOOOOO010100000FA0*Chr(13))をMid()を使って0FA0にしています。

環境は、VB 6.0です。


魔界の仮面弁士  2006-09-04 19:23:50  No: 133055

> 環境は、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 による単純な条件分岐だけでも十分に記述できますよね。


紙コップ  2006-09-04 20:43:00  No: 133056

すみません。Xビット目が0か1取得したいです。


あいうえお  2006-09-05 02:20:05  No: 133057

文字のアスキーコードを取って、それを2で割った余りが答えです。
つまり、16ビット目なら該当文字のアスキーコードを2で1回、
つまり、15ビット目ならを2で1回割った余りをさらに、2で割ります


あいうえお  2006-09-05 02:45:32  No: 133058

失礼
>つまり、15ビット目ならを2で1回割った余りをさらに、2で割ります
1回割った余りではなく、商を2で割ります


紙コップ  2006-09-05 03:04:35  No: 133059

過去ログからここまでは出来たのですが、
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


紙コップ  2006-09-05 04:37:28  No: 133060

何か色々やっている間に出来ました。
皆さん有難うございます。


よくわからないけど  2006-09-05 04:56:14  No: 133061

これじゃ駄目?
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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加