■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#46315-0ShiftJISコード(ASCIIコード)から文字列に変換DF2001-08-29(水) 20:57
     #46316-0RE#46315:ShiftJISコード(ASCIIコード)から文字列に変換ろってんまいあ2001-08-29(水) 21:13
     #46365-0RE#46316:ShiftJISコード(ASCIIコード)から文字列に変換DF2001-08-30(木) 13:39
     #46368-0RE#46365:ShiftJISコード(ASCIIコード)から文字列に変換DF2001-08-30(木) 14:10
     #46373-0RE#46365:ShiftJISコード(ASCIIコード)から文字列に変換トモ@あゆあゆ2001-08-30(木) 14:26
     #46375-0RE#46373:ShiftJISコード(ASCIIコード)から文字列に変換さわたり まゆき2001-08-30(木) 14:29
     #46377-0RE#46373:ShiftJISコード(ASCIIコード)から文字列に変換さわたり まゆき2001-08-30(木) 14:55
     #46387-0RE#46377:ShiftJISコード(ASCIIコード)から文字列に変換DF2001-08-30(木) 16:14
#46315-0
ShiftJISコード(ASCIIコード)から文字列に変換
こんばんは、

4b3237303532313231→K27052121
このような変換を行ないたいのですが、良い方法はあるでしょうか。
…これってSHIFTJISコードですよね?、、、よくわからない、、、
アスキーコードなのかな?
左は16進数だと思います。

出来れば、日本語に関してもShiftJISで
????????????→あああ
などというような変換が出来る方法はありますか?

わけのわからない質問ですいません。

ご存知でしたらご教授ください。
よろしくおねがいします。
#46316-0
RE#46315:ShiftJISコード(ASCIIコード)から文字列に変換
> こんばんは、
> 
> 4b3237303532313231→K27052121
> このような変換を行ないたいのですが、良い方法はあるでしょうか。
> …これってSHIFTJISコードですよね?、、、よくわからない、、、
> アスキーコードなのかな?
> 左は16進数だと思います。
> 
> 出来れば、日本語に関してもShiftJISで
> ????????????→あああ
> などというような変換が出来る方法はありますか?
> 
> わけのわからない質問ですいません。
> 
> ご存知でしたらご教授ください。
> よろしくおねがいします。

16進数ですよね?
Mid 関数で切り出して、Val 関数で数値化して、Chr 関数で文字化しましょう。

では、頑張ってくださいね
#46365-0
RE#46316:ShiftJISコード(ASCIIコード)から文字列に変換
こんにちは、ページが流れていってしまいましたが
ろってんまいあさん、レスありがとうございます。

> > 4b3237303532313231→K27052121
> > このような変換を行ないたいのですが、良い方法はあるでしょうか。
> > 
> > 出来れば、日本語に関してもShiftJISで
> > ????????????→あああ
> > などというような変換が出来る方法はありますか?

> 16進数ですよね?
> Mid 関数で切り出して、Val 関数で数値化して、Chr 関数で文字化しましょう。
> 
おかげさまで作成することができましたが
日本語に関する処理が出来ません。

'────────────────────
'Byteデータを変換
Public Function CodeToChar(ByVal Code As String) As String
  Dim ByteHexStr As String
  Dim CharStr As String
  Dim i As Integer
  
  CodeToChar = ""
  '2で割り切れないなら変換不可能
  If (Len(Code) Mod 2) <> 0 Then Exit Function
  
  '4で割り切れるなら2バイト文字の可能性あり
  If (Len(Code) Mod 4) = 0 Then
    For i = 1 To Len(Code) / 4
      ByteHexStr = Mid$(Code, ((i - 1) * 4) + 1, 4)
      
      ByteHexStr = "&H" & ByteHexStr
      
      CharStr = Chr$(Val(ByteHexStr))
      CodeToChar = CodeToChar & CharStr
    Next
  Else 
  '4で割り切れない場合普通の1バイト文字
    For i = 1 To Len(Code) / 2
      ByteHexStr = Mid$(Code, (i * 2) - 1, 2)
      
      CharStr = Chr$(Val("&H" & ByteHexStr))
      CodeToChar = CodeToChar & CharStr
    Next
  End If
  
End Function

Private Sub testCodeToChar()
  If Not (CodeToChar("4b") = "K") Then MsgBox "×"
  If Not (CodeToChar("4B") = "K") Then MsgBox "×"
  If Not (CodeToChar("4b3237303532313231") = "K27052121") Then MsgBox "×"
End Sub

1バイト文字の変換はChrとValを用いて無事に出来たのですが
2バイトの変換がうまくいきません。

更にうまいやり方はないものでしょうか。

"あ"を10進数の文字コードにしたり
その逆を行なえたら非常にうれしいのですが…
#46368-0
RE#46365:ShiftJISコード(ASCIIコード)から文字列に変換
たびたび失礼します。
対象となるコードはShiftJISです。

  Debug.Print Chr(&H41)
  Debug.Print Chr(&H82A0)

このようなコードで"A"と"あ"が出力される
動作確認はしたのですが

"41424382A082A282A4 "
という文字列があった場合
"ABCあいう"
という変換を行ないたいのです。

日本語の場合は4文字で切り出して
半角文字英文字の場合は2文字で切り出さなければ
ならないのですが
その区別方法がわからなくて困っています。

全角文字は必ず"8"という16進数から始まると
おもって処理をしたりするのでしょうか?

よろしくお願いします。
#46373-0
RE#46365:ShiftJISコード(ASCIIコード)から文字列に変換
> こんにちは、ページが流れていってしまいましたが
> ろってんまいあさん、レスありがとうございます。
> 
> > > 4b3237303532313231→K27052121
> > > このような変換を行ないたいのですが、良い方法はあるでしょうか。
> > > 
> > > 出来れば、日本語に関してもShiftJISで
> > > ????????????→あああ
> > > などというような変換が出来る方法はありますか?

こんなのはダメでしょうか?
バイト配列に入れてStrConvを使う方法ですが。
TextBoxと、CommandButtonをFormに貼り付けてください。
# エラー処理とか一切省いてます。

Private Sub Command1_Click()
Dim bytString() As Byte     ' Shift-JIS
Dim strUnicode  As String   ' Unicode
Dim i           As Integer
Dim intPos      As Integer

    ' 配列確保(16進数の並びFFなどなので長さの半分)
    ReDim bytString(Len(Text1.Text) / 2)
    
    For i = 1 To Len(Text1.Text) Step 2
        ' バイトとして配列に格納。
        bytString(intPos) = CByte("&H" & Mid$(Text1.Text, i, 2))
        intPos = intPos + 1
    Next

    ' Unicodeに変換
    strUnicode = StrConv(bytString, vbUnicode)
End Sub
#46375-0
RE#46373:ShiftJISコード(ASCIIコード)から文字列に変換
>     ' 配列確保(16進数の並びFFなどなので長さの半分)
>     ReDim bytString(Len(Text1.Text) / 2)

ちがう。
ReDim bytString(Len(Text1.Text) / 2 - 1)
です。
# 名前も間違ってたし。
#46377-0
RE#46373:ShiftJISコード(ASCIIコード)から文字列に変換
> > > > 4b3237303532313231→K27052121
> > > > このような変換を行ないたいのですが、良い方法はあるでしょうか。
> > > > 
> > > > 出来れば、日本語に関してもShiftJISで
> > > > ????????????→あああ
> > > > などというような変換が出来る方法はありますか?
> こんなのはダメでしょうか?
> バイト配列に入れてStrConvを使う方法ですが。
> TextBoxと、CommandButtonをFormに貼り付けてください。
> # エラー処理とか一切省いてます。

なんとなく、少し手直しをしてみたので。(たぶん
# やたら無駄に投稿してる気がしますが…すみませんですm(_ _;)m

Private Sub Command1_Click()
Dim strAnsi     As String   ' Shift-JIS(Ansi)の16進数の文字列
Dim bytString() As Byte     ' Shift-JIS(Ansi)のバイト配列
Dim strUnicode  As String   ' Unicode
Dim i           As Integer

    ' 一時保存。
    strAnsi = Text1.Text
    ' 配列確保(16進数の並びFFなどなので長さの半分-1)
    ReDim bytString(Len(strAnsi) / 2 - 1)    
    ' 二文字ずつ進める。
    For i = 1 To Len(strAnsi) Step 2
        ' バイトとして配列に格納。
        bytString((i - 1) / 2) = CByte("&H" & Mid$(strAnsi, i, 2))
    Next    
    ' Unicodeに変換
    strUnicode = StrConv(bytString, vbUnicode)    
    ' 表示。
    MsgBox strUnicode
End Sub
#46387-0
RE#46377:ShiftJISコード(ASCIIコード)から文字列に変換
関数を作ってみました。

先ほどの1バイトだけを求めるものから
全角文字の先頭バイトは&H80以上というものを使った関数
(調べたらそうらしいです)

と

さわたり まゆき さんの
StrConvを使った方法です。

testCodeToChar/testCodeToChar2
を実行させても×のメッセージが出ないので
いい感じです。


ありがとうございました。( ^.^)( -.-)( _ _)

'────────────────────
'Byteデータを変換
'『41424382A082A282A4』という文字列を『ABCあいう』
'に変換します
Public Function CodeToChar(ByVal Code As String) As String
  Dim ByteHexStr As String
  Dim CharStr As String
  Dim i As Integer
  Dim DataIndex As Integer
  
  CodeToChar = ""
  '2で割り切れないなら変換不可能
  If (Len(Code) Mod 2) <> 0 Then Exit Function
  
    For i = 1 To Len(Code) / 2
      DataIndex = (i * 2) - 1
      ByteHexStr = Mid$(Code, DataIndex, 2)
      
      '2バイト文字と思われる場合、4文字分取得
      If Val("&H" & ByteHexStr) >= Val("&H80") Then
        If DataIndex + 3 <= Len(Code) Then
          ByteHexStr = Mid$(Code, DataIndex, 4)
        End If
        i = i + 1
      End If
      
      CharStr = Chr$(Val("&H" & ByteHexStr))
      CodeToChar = CodeToChar & CharStr
    Next
  
End Function

'────────────────────
'Byteデータを変換
'『41424382A082A282A4』という文字列を『ABCあいう』
'に変換します
Public Function CodeToChar2(ByVal Code As String) As String
  Dim strAnsi     As String   ' Shift-JIS(Ansi)の16進数の文字列
  Dim bytString() As Byte     ' Shift-JIS(Ansi)のバイト配列
  Dim strUnicode  As String   ' Unicode
  Dim i           As Integer
  
      ' 一時保存。
      strAnsi = Code
      ' 配列確保(16進数の並びFFなどなので長さの半分-1)
      ReDim bytString(Len(strAnsi) / 2 - 1)
      ' 二文字ずつ進める。
      For i = 1 To Len(strAnsi) Step 2
        ' バイトとして配列に格納。
        bytString((i - 1) / 2) = CByte("&H" & Mid$(strAnsi, i, 2))
         
      Next
      ' Unicodeに変換
      strUnicode = StrConv(bytString, vbUnicode)
      ' 表示。
      CodeToChar2 = strUnicode
End Function

Private Sub testCodeToChar()
  If Not (CodeToChar("4b") = "K") Then MsgBox "×"
  If Not (CodeToChar("4B") = "K") Then MsgBox "×"
  If Not (CodeToChar("4b3237303532313231") = "K27052121") Then MsgBox "×"
  If Not (CodeToChar("41424382A082A282A4") = "ABCあいう") Then MsgBox "×"
  If Not (CodeToChar("4182A082A2424382A4") = "AあいBCう") Then MsgBox "×"
End Sub

Private Sub testCodeToChar2()
  If Not (CodeToChar2("4b") = "K") Then MsgBox "×"
  If Not (CodeToChar2("4B") = "K") Then MsgBox "×"
  If Not (CodeToChar2("4b3237303532313231") = "K27052121") Then MsgBox "×"
  If Not (CodeToChar2("41424382A082A282A4") = "ABCあいう") Then MsgBox "×"
  If Not (CodeToChar2("4182A082A2424382A4") = "AあいBCう") Then MsgBox "×"
End Sub
このページと関連する記事:
#546-1入力データのJIS変換について2004-04-09(金) 01:07
#17346-0文字変換の方法2000-03-02(木) 16:34
#290-2文字列操作について2003-11-22(土) 20:43
#7841-0バイト配列→文字列1999-10-20(水) 23:45
#238-1全角のチェックについて2002-08-19(月) 11:24
#2609-216進を文字列に変換するには?2002-08-29(木) 11:03
#16780-01バイト文字と2バイト文字の混在するテキストデータの取得2000-02-24(木) 15:58
#2430-0全角入力出来ないテキストボックス1999-10-18(月) 15:56
#1467-0文字列の変換(簡単な暗号化・復元)について2005-02-21(月) 15:10
#2444-1 CSVへエクスポート時の文字区切り記号について1999-08-02(月) 13:48
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)