[リストへもどる]
一括表示

投稿時間:2002/11/29(Fri) 11:10
投稿者名:たけ
Eメール:
URL :
タイトル:
BCDのデータを扱うには
BCDデータの先頭4桁を使って
値を判断したいのですが、どのようにすれば良いのか
分かりません。
ご教授宜しくお願いいたします。

投稿時間:2002/11/29(Fri) 12:27
投稿者名:batchman
Eメール:batchman@ae.wakwak.com
URL :
タイトル:
Re: BCDのデータを扱うには
> BCDデータの先頭4桁を使って
> 値を判断したいのですが、どのようにすれば良いのか
> 分かりません。
> ご教授宜しくお願いいたします。

Byte型の上位4Bitと下位4Bitに分けることだとして、

Dim bytHigh As Byte
Dim bytLow  As Byte

bytHigh = bytBCD \ 16
bytLow = bytBCD Mod 16

投稿時間:2002/11/29(Fri) 13:29
投稿者名:たけ
Eメール:aaa
URL :
タイトル:
Re^2: BCDのデータを扱うには
> > BCDデータの先頭4桁を使って
> > 値を判断したいのですが、どのようにすれば良いのか
> > 分かりません。
> > ご教授宜しくお願いいたします。
>
> Byte型の上位4Bitと下位4Bitに分けることだとして、
>
> Dim bytHigh As Byte
> Dim bytLow  As Byte
>
> bytHigh = bytBCD \ 16
> bytLow = bytBCD Mod 16

投稿時間:2002/11/29(Fri) 13:33
投稿者名:たけ
Eメール:aaa
URL :
タイトル:
Re^2: BCDのデータを扱うには
> > BCDデータの先頭4桁を使って
> > 値を判断したいのですが、どのようにすれば良いのか
> > 分かりません。
> > ご教授宜しくお願いいたします。
>
> Byte型の上位4Bitと下位4Bitに分けることだとして、
>
> Dim bytHigh As Byte
> Dim bytLow  As Byte
>
> bytHigh = bytBCD \ 16
> bytLow = bytBCD Mod 16


レスありがとうございます。
ちょっと分からない事が有るのですが、
Byte型は1バイト(8ビット)でなんで
> bytHigh = bytBCD \ 16
で上位4ビットなのでしょうか?

先程、間違って投稿してしまいました。すみません

投稿時間:2002/11/29(Fri) 14:46
投稿者名:batchman
Eメール:batchman@ae.wakwak.com
URL :
タイトル:
Re^3: BCDのデータを扱うには
> Byte型は1バイト(8ビット)でなんで
> > bytHigh = bytBCD \ 16
> で上位4ビットなのでしょうか?

VBでビットシフト演算子があればよいのですが、無いので割り算で代用です。
2で割ると右に1つビットシフトしていると考えれば、4つ移動するには2×2×2×2で16です。

もしかして、ビット列が
11110101だった場合に、00001111じゃなくて、11110000にしたい?
それなら、
bytHigh = (bytBCD \ 16) * 16
です。

投稿時間:2002/11/29(Fri) 15:31
投稿者名:たけ
Eメール:aaa
URL :
タイトル:
Re^4: BCDのデータを扱うには
> > Byte型は1バイト(8ビット)でなんで
> > > bytHigh = bytBCD \ 16
> > で上位4ビットなのでしょうか?
>
> VBでビットシフト演算子があればよいのですが、無いので割り算で代用です。
> 2で割ると右に1つビットシフトしていると考えれば、4つ移動するには2×2×2×2で16です。
>
> もしかして、ビット列が
> 11110101だった場合に、00001111じゃなくて、11110000にしたい?
> それなら、
> bytHigh = (bytBCD \ 16) * 16
> です。

っということはこういう事でいいでしょうか?
60ビットのデータで先頭4桁と14番目から4桁を取得して
値がいくつになるか
Sub aaaa(vBytBCD As Variant)
'vByBCDには60ビット分のSignalがある
Dim bytHigh As Byte
Dim bytLow As Byte
Dim vBytBCD2 As Variant

'先頭4桁のビット取得
bytHigh = vBytBCD \ (2 ^ 4)

'14番目から4桁のビット取得
vBytBCD2 = vBytBCD \ (2 ^ 17)
bytLow = vBytBCD2 Mod 16

End Sub
でいいのですか

投稿時間:2002/11/29(Fri) 17:24
投稿者名:batchman
Eメール:batchman@ae.wakwak.com
URL :
タイトル:
Re^5: BCDのデータを扱うには
> 60ビットのデータで先頭4桁と14番目から4桁を取得して
> 値がいくつになるか

たとえVariant型といえど、60Bitという半端なBitは格納できません。8Bit×8Byteで64Bitのはずです。
vBytBCDにはどのようにデータをセットしているのでしょうか?

> Sub aaaa(vBytBCD As Variant)
> 'vByBCDには60ビット分のSignalがある

> Dim bytHigh As Byte
> Dim bytLow As Byte
> Dim vBytBCD2 As Variant
>
> '先頭4桁のビット取得
> bytHigh = vBytBCD \ (2 ^ 4)
>
> '14番目から4桁のビット取得
> vBytBCD2 = vBytBCD \ (2 ^ 17)
> bytLow = vBytBCD2 Mod 16
>
> End Sub
> でいいのですか

BCDというのは、2進化10進符号で4Bit単位で1桁を表すわけですが、14番目というのは14Bit目ですか?
4Bit境界になってませんが...Sourceの17Bitのほうかな?

vBytBCDがどのように入っているか分からないので、
60BitがByte型の8Byteの配列に入っているとみなして...

Function aaa(bytBCD() as Byte) as Byte

    Dim bytHigh As Byte
    Dim bytLow As Byte

    '先頭4Bit取得
    bytHigh = bytBCD(0) \ (2 ^ 4)

    '17Bit目から4Bit取得
    bytLow =  bytBCD(2) \ (2 ^ 4)

    aaa = bytHigh + bytLow

End Function

投稿時間:2002/12/02(Mon) 11:38
投稿者名:たけ
Eメール:aaa
URL :
タイトル:
お礼
> BCDというのは、2進化10進符号で4Bit単位で1桁を表すわけですが、14番目というのは14Bit目ですか?

なるほど、とても勉強になりました。
ありがとうございました。