标题:Winsock [帮忙,Hex和ASCII字符转换]
只看楼主
ak47my
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:229
专家分:0
注 册:2005-12-2
 问题点数:0 回复次数:6 
Winsock [帮忙,Hex和ASCII字符转换]
因为是winsock接收,
为什么不能将接收到的ascii弄的跟wpe接收的一样
特殊字符就用点来表示   ....

abcdef....aaaaa......

我自己写的转换函数都转出abcdef  口口aaaaa口.?.

这样的。。
有啥办法啊????
搜索更多相关主题的帖子: Hex ASCII Winsock 字符 
2008-12-03 21:43
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
得分:0 
修改一下转换函数,把特殊字符直接转成".",而不要转成Unicode了
2008-12-04 14:29
ak47my
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:229
专家分:0
注 册:2005-12-2
得分:0 
多谢楼上
我的函数是
Public Function GbkStr(ByVal ss As String) As String
On Error Resume Next
Dim x As String
Dim Y As Variant
Dim i As Integer
Dim j As Integer
ReDim b(0 To (Len(ss) / 2)) As Byte

j = 0

   For i = 1 To Len(ss)
            
            x = Mid$(Trim(ss), i, 2)
            
            Y = CLng("&H" & x)
        
            If Y < 0 Then Y = Y + 65536
            
            
            b(j) = Y
            
            i = i + 1
            j = j + 1
            Next i
            
    GbkStr = StrConv(b, vbUnicode)
End Function


请问具体该怎么做啊???

提问:回答: 不提问怎么回答? 提问不清楚怎么回答?
2008-12-04 15:52
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
得分:0 
If Y < 0 Then Y = Y + 65536
再判断一下是否是不可显示的字符(H0~H20),如果是,则转成"."
2008-12-04 16:18
ak47my
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:229
专家分:0
注 册:2005-12-2
得分:0 
3Q 我试下

提问:回答: 不提问怎么回答? 提问不清楚怎么回答?
2008-12-04 16:20
ak47my
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:229
专家分:0
注 册:2005-12-2
得分:0 
可以了。谢谢了啊

提问:回答: 不提问怎么回答? 提问不清楚怎么回答?
2008-12-04 16:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
我写的能显示中文,虽然有时有乱码.

因为是写的共用函数里的部分,在调用时不需要使用,所以用了条件编译.
CopyMemory 是API函数,声明如下:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)


程序代码:
    #If tools Then
    '工具显示16进制代码
    With Form1.Text3
        Dim txj As String
        Dim txj2 As String
        Dim txj3 As String
        Dim txp As Boolean
        Dim txj4 As Integer
        Dim txk(1) As Byte
        
        .Text = "加密结果" & vbCrLf & "      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"
        
        For i = 0 To optr - 1
            '.Text =.Text & vbcrlf &
            txj = Hex(pout(i))
            If Len(txj) = 1 Then txj = "0" & txj
            txj2 = txj2 & " " & txj    '这是生成16进制部分
            If pout(i) < 128 Then      '从这里开始是生成 ASCII 部分
                If pout(i) >= 32 Then                 '可显示字符
                    txj3 = txj3 & Chr(pout(i))
                Else
                    txj3 = txj3 & "."
                End If
            Else
                If Not txp Then        '是否上一个字符输出时,取走了这个字符,否,输出中文
                    txk(1) = pout(i)
                    txk(0) = pout(i + 1)
                    CopyMemory txj4, txk(0), 2
                    txj3 = txj3 & Chr(txj4)
                    txp = True         '设置取走了下一个字符
                Else
                    txp = False        
                End If
            End If
            If (i + 1) Mod 16 = 0 Then          '换行,按每行16个字节排列
                txj = "0" & i \ 16
                txj = String(4 - Len(txj), "0") & txj
                .Text = .Text & vbCrLf & txj & " " & txj2 & "  " & txj3
                txj2 = ""
                txj3 = ""
            End If
    
    Next i
                txj = "0" & i \ 16            '最后一行的显示
                txj = String(4 - Len(txj), "0") & txj
                .Text = .Text & vbCrLf & txj & " " & txj2 & Space(48 - Len(txj2)) & "  " & txj3
    End With
    '工具输出结束
    #End If

授人于鱼,不如授人于渔
早已停用QQ了
2008-12-04 17:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-247635-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022167 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved