|
■No54716 (せき さん) に返信
>
> たびたびで申し訳ありませんが、また、質問させてください。
>
> 配列のデータ型はStringでしょうか?
最初のレスでbyte配列を使うように言ったつもりだったのですが伝わらなかったですね。
> (6)を算出する計算式または関数が全く想像できません。
> 例えば、AJIS8データ(5byte):アイウエオ、BShift-JISデータ(10byte):あいうえお
> Dim sDATA2 As String = "アイウエオ"
> Dim sDATA3 As String = "あいうえお"
> とすると、コードはどうなるでしょうか?コード例をご教示いただけないでしょうか?
あまり完全に近いコードの提示はしたくないのですが話を伸ばしてもしょうがないので提示された
値に対し処理する例を載せます。(魔界の仮面弁士さん、コードを少し頂きましたmm)
LRCの計算で合計を256で割った余りが0のとき256になってしまうのでmod256を追加してます。
また計算は正しいのかわかりませんので仕様確認をして下さい。
Dim sDATA2 As String = "アイウエオ"
Dim sDATA3 As String = "あいうえお"
Dim bytBuf(82) As Byte
Dim intIdx As Integer
'--- 念のため0クリア
Array.Clear(bytBuf, 0, bytBuf.Length)
'--- STX
bytBuf(0) = 2
'--- Data2 JIS8用のエンコードの取得が分からなかったので1文字ずつASCコードを取得しています。
intIdx = 1
For Each chrTmp As Char In sDATA2
If intIdx <= 30 Then
Dim bytCD As Integer = Asc(chrTmp)
bytBuf(intIdx) = bytCD
End If
intIdx += 1
Next
'--- Data3
intIdx = 1
Dim encSJis As Encoding = Encoding.GetEncoding("Shift-Jis")
encSJis.GetBytes(sDATA3, 0, sDATA3.Count, bytBuf, 31)
'--- ETX
bytBuf(81) = 3
'--- LRC
Dim intSum As Integer = 0
For intIdx = 1 To 80
intSum += bytBuf(intIdx)
Next
Dim a As Integer = intSum Mod 256
Dim b As Integer = (256 - a) Mod 256 '--- 下位8ビットを取得するためこっちも256で割った余りとする
bytBuf(82) = b
|