比如说我输入的是913b,我写入文件之后,用UltraEdit打开,看到的当然是乱码,切换16进制编辑文件的时候,我想在左边16进制区域能看到91 3b,我写了一个函数,但是只能处理部分,91就显示不出来,请问为什么?或者告诉我该如何实现?我写的函数如下:dim tmp as string
            dim rst as string
            dim i as integer
            tmp = tmp & Mid(str, x, y)
            For i = 1 To Len(tmp) Step 2
                rst = rst & Chr(CInt("&H" & Mid(tmp, i, 2)))               
            Next i

解决方案 »

  1.   

    你好,有没有什么其他的实现方法,就是不用那个CInt,肯定是那个函数的问题
      

  2.   

    鉴于你的表达非常含糊,贴的代码也跟没有一样,我来猜测一下你的意思你写入的是0x913b
    要显示的是字符串"913b",对吗?
    你的函数处理的是Chr(CInt("&H91))也即还原回0x91所代表的字符,如你所说“当然是乱码”rst = rst & Chr(CInt("&H" & Mid(tmp, i, 2)))               
    应改成
    rst = rst & Mid(tmp, i, 2)
      

  3.   

    ASCII编码的范围是:00~7F,你都超范围了,当然不行了,要用Unicode才行。
      

  4.   

    按照我的理解,我写了一个小小的代码,不知对你有帮助没有Option ExplicitPrivate Sub Command1_Click()
        txtUni.Text = AscW("中")
    End SubPrivate Sub Command2_Click()
        txtHZ.Text = ChrW(Val(txtUni.Text))
    End Sub
      

  5.   

    to 阿根廷巫师
    你的办法是转成unicode码,那在txtUni中输出的是一串数字,在vb中写入文件的话,能直接把unicode码写进去吗?我测试了一下,如果直接写ascw(text)到文件的话,用十六进制读出来的不是我想要的东西
      

  6.   

    比如说我在文本框中写入了“b198”这样的字符串,我希望经过处理,把处理过的字符串写入文件,然后当我用UltraEdit编辑器打开的时候看到的是乱码,这个编译器有一个可以查看16进制的按钮,我想在那个16进制的区域看到b1 98,而用记事本打开的时候是乱码?你用过这个编译器的吧?
      

  7.   

    Private Sub Command1_Click()
        Dim byt() As Byte
        Dim s As String
        Dim i As Long
        s = Text1.Text
        ReDim byt(0 To Len(s) \ 2 - 1) As Byte
        For i = 1 To Len(s) Step 2
            byt(i \ 2) = CByte("&H" & Mid(s, i, 2))
        Next    Open "f:\test" For Binary As #1
        Put #1, , byt
        Close 1
    End Sub
      

  8.   

    所以我说你是傻逼,屎一样的表达能力。根据你13楼的说法,我5楼的猜测并不是胡扯,而且在经过对你屎一样表达能力的分析之后,我终于清楚了,我五楼以为你是要从文件里读出数据并显示,而你一楼的代码是非常SB的写入,连写入的代码都没贴出来,我以为你是整串读完要显示。为什么写入之后的东西读不出来?6楼已经说过了,ASCII编码的范围是:00~7F,你用chr函数将大于7F的数转换,再以文本方式写入,当然不行。而且0x913b这东西也不能转换为一个合法字符,所以我猜你应该是要在文本框内随意输入用字符串形式表达的十六进制数据,并写入文件。那么只能用Binary方式打开文件,再put字节进去。
      

  9.   

    感谢pos机,我再加50分,帮我回答一个问题,就算是另外一个问题吧,再发个帖子太麻烦了。我有一个字符串,一部分需要处理,一部分不需要处理,这样转化成二进制流之后能不能和不需要处理的字符串合并为一个字符串,这是因为我代码方面的需要,有没有什么办法处理
      

  10.   

    我想说的就是把b19f这样的字符转成乱码,用UltraEdit编辑器上的"切换成16进制模式"可以看到这个16进制
      

  11.   

    我以为你一楼的代码是读取而非写入,既然要写的是十六进制数据,还特地加上&H以十六进制表示,再转成long型数值,再转成chr再以文本写入,我真没想到有人会做这么脱裤子放X的事情你这句
    rst = rst & Chr(CInt("&H" & Mid(tmp, i, 2)))
    看起来更像是一个字节一个字节的读取出来,再串成串。没想到你是一个字节一个字节转换成chr再串起来,再写到文本里,这简直是……建议你加强一下ASCII码,还有十六进制与字符串关系等方面的知识。
      

  12.   

    这不叫“把b19f这样的字符转成乱码”,任何数据的本质都是二进制(十六进制),只能说0xB19F不能转换为合法可见的字符而已
      

  13.   

    既然你要的是自己输入的任意十六进制,那就不存在“只是不能转7f以上的数据”。只要你一直用chr来以文本方式写入,就达不到你要的目的。这不是挑你刺,只是奢望对十六进制、字符、ASCII相关方面知识一无所知的你能稍微了解而已。
      

  14.   

    是啊,在CSDN注册近两年,回过上千个贴子,你是唯一一个让我忍受不了开口骂人的,牛吧?你呢,P点本事没有,提个问还一点都不谦虚,牛逼哄哄,骂个人中间还要孬孬的加个X,你怎么还没把自己怂死呢?
      

  15.   

    原始数据是十六进制,写入的结果也是十六进制,我只是没想到世界上有你这么蠢的人,会做这么傻逼这么脱裤子放屁的事情,还截取字符串,加上十六进制表示符,赋值,转换成long,再转换成chr,再串起来,再以文本方式写入。你能找到比你这种行为更蠢的吗?
      

  16.   

    有一部分的效果=无
    你难道要跟人说,有一部分的自然数是素数,所以全部的自然数都是素数了?
    你这种转换成chr的方法根本就是不可行的,只能转换一部分的数据有何意义?0-7F能用,80-FF不能用,你的这段程序有什么作用?微软卖操作系统,只能在50%的机子上运行,难道他跟不能运行的客户说:“我们有一部分能运行”?你玩个游戏存个存档,只有一半的存档能读取,你敢存吗?你用块硬盘存东西,只有一半的数据是正确的,你敢用吗?你用个键盘打字,只有一半的键按了有反应,你要这种键盘吗?你家LED显示器有一半的坏点,你用吗?你的鞋子只有一只,你穿吗?
    懒得跟你个电脑盲耗时间,不再回贴。
      

  17.   

    我只有一句话,我只想知道答案!因为我不会,所以我上来问,但是你却没好气的多啥啥的一些东西,还脱裤子放屁,那不是你说的吗?在我和你的关系没达到正常水平之前,你就不能像个正常的人一样表达你的思想,非要用这种很刺激的言语?没有人和我讲过ascII只能有这么个范围,我怎么知道我写的函数是因为这个范围而导致的错误,那么实验结果不符合我的要求我当然要问,这方面我当然觉得是我自己的问题,但是一直用你那卑鄙的语言来表达,你说你什么意思,你既然没猜对,说你胡扯怎么了?不就是胡扯吗?有必要这么样子来针锋相对吗?你就不会说点人话?
    既然你不回了,我也懒得骂你了