asc扩展字符写入字符串的问题,急!

qren25 2005-09-21 05:05:37
dim strinput as string
strinput="9876"
如何将strinput转换成对应的Asc码,然后写入文件,要求 9876 对应的十六进制为2694
我用的转换函数如下
Public Function DecToAsc(ByVal strSource As String)
Dim strOut, strtemp As String
If Not IsNumeric(strSource) Then
DecToAsc = ""
Exit Function
End If
strSource = Hex(strSource)
If Len(strSource) < 4 Then
strSource = String(4 - Len(strSource), "0") + strSource
End If
While Len(strSource) > 0
If Len(strSource) = 1 Then
strSource = "0" + strSource
End If
strtemp = Right(strSource, 2)
Dim lngtemp As Integer
lngtemp = Val("&H" & strtemp & "&")
strtemp = Chr(lngtemp)
strOut = strtemp + strOut
If Len(strSource) > 1 Then
strSource = Left(strSource, Len(strSource) - 2)
End If
Wend
DecToAsc = strOut
End Function
转换的结果对应的十六进制数是2600,原因是chr(148)写入后写成了chr(0)
望各位达人能给出一个切实可行的方案!可调试通过的代码必重谢,分不够再加!
...全文
193 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2005-09-22
  • 打赏
  • 举报
回复
按你的例子,实际上你要转换的不是 ASCII 码,而是 16 进制字符串:

strinput="9876"
strOutput = Right("000" & Hex(strinput), 4)

Open "C:\test.txt" For Output As #1
Print #1, strOutput
Close #1
samwzhang 2005-09-22
  • 打赏
  • 举报
回复
Dim S As String
Dim B() As Byte, SS As String, i As Long
S = "9876987698769876"
If Len(S) Mod 4 <> 0 Or S = "" Then MsgBox "无解": Exit Sub
ReDim B(0 To Len(S) / 2 - 1)
For i = 0 To Len(S) / 4 - 1
B(i * 2) = Val("&H" & Mid(S, i * 4 + 3, 2))
B(i * 2 + 1) = Val("&H" & Mid(S, i * 4 + 1, 2))
Next i
SS = B
MsgBox SS
tlbbpcg 2005-09-22
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a As Byte
Dim b As Byte
a = Update("9876")
b = LowDate("9876")

Open "c:\a.txt" For Binary Access Write As #1
Put #1, 1, a
Put #1, 2, b
Close
End Sub

Private Function Update(inp As integer) As Byte
Update = Int(inp / 256)
End Function

Private Function LowDate(inp As integer) As Byte
LowDate = inp Mod 256
End Function
qren25 2005-09-22
  • 打赏
  • 举报
回复
northwolves(狼行天下):
十进制的数字9876,要转换成对应的两位AscII码再写入文件中,而且要求用UltraEdit之类的工具打开该文件后,这两个ASCII码相应的十六进制为2694,这么说明白吗?
samwzhang 2005-09-22
  • 打赏
  • 举报
回复
一生气写错了,是UCS2码。
VC里边因为字符串Char *里边存的是ASCII码,所以要在倒转后用API函数:WideCharToMultiByte转换。
而VB完全不需要,因为VB的字符串String[或者 BYTE()]里边保存的就是UCS2码。

我估计你是在解 短消息里边的 PDU报文,是不是?
samwzhang 2005-09-22
  • 打赏
  • 举报
回复
Dim S As String
Dim B() As Byte, SS As String, i As Long
S = "9876987698769876"
If Len(S) Mod 4 <> 0 Or S = "" Then MsgBox "无解": Exit Sub
ReDim B(0 To Len(S) / 2 - 1)
For i = 0 To Len(S) / 4 - 1
B(i * 2) = Val("&H" & Mid(S, i * 4 + 3, 2))
B(i * 2 + 1) = Val("&H" & Mid(S, i * 4 + 1, 2))
Next i
SS = B
MsgBox SS
这段代码运行的结果就是“顶顶顶顶”
samwzhang 2005-09-22
  • 打赏
  • 举报
回复
看看我上面的回答
答案就是那个,真晕。
其实这个就是US2码。VC的字符串保存的是ASCII字符;
VB的String[其实就是BYTE*]保存的就是US2码,但是这个码是两两错位的,所以要先转过来再赋值给String 型,怎么那么笨呢?
supergreenbean 2005-09-22
  • 打赏
  • 举报
回复
用Byte数组来存放就不会有那种问题了
qren25 2005-09-22
  • 打赏
  • 举报
回复
我的原来 要求是将9876 转成2个字符。这两个字符对应的十六进制为2694
northwolves(狼行天下) of123() 的理解有误
tlbbpcg(水龙王) 的答案基本可行。
写入没问题了,现在新的问题是
我怎么能正确读出这些特殊字符来设置到string里 呢?
再加一百分!
盼高手解答!

northwolves 2005-09-22
  • 打赏
  • 举报
回复
Function DECTOHEX(ByVal X As String) As String
If Not IsNumeric(X) Then DECTOHEX = "": Exit Function
DECTOHEX = Right("0000" & Hex(X), 4)
End Function
northwolves 2005-09-21
  • 打赏
  • 举报
回复
看不懂你到底想达到什么目的,请再举个例子
qren25 2005-09-21
  • 打赏
  • 举报
回复
fishmans(金脚指) 的确理解错误,现在可以理解了吗?
不行我就给你解释解释
viena 2005-09-21
  • 打赏
  • 举报
回复
晕~
fishmans 2005-09-21
  • 打赏
  • 举报
回复
不好意思,好像理解错误
fishmans 2005-09-21
  • 打赏
  • 举报
回复
dim strinput as string
strinput="9876"

hex(cint(strinput))
conrad_wan 2005-09-21
  • 打赏
  • 举报
回复
up

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧