如果把文件中的每个字符都转成两个字节的?(UNICODE一律使用两个字节表示一个字符)
解决方案 »
- VB6 写的 Com DLL 有所谓的命名空间吗 ??
- 关于比较字符重复个数问题
- 真怪了,难道这是dtpicker控件的bug(日期挑选器),大家可以拷贝我的代码试试
- 请教关于数据库并发的问题
- 如何获得当前路径下的所有文件夹的名称,数量??
- 问题:窗体之间的参数传递也接收!
- 如何使用子分类技术?
- 有谁做过LED显示?
- 有分相送如何用VB动态获取网络邻居的名称及其IP地址要所有邻居
- Set database = workspace.OpenDatabase (dbname, options, read-only, connect)的第二个和第四个参数是什么意思...
- vb中如何把文件转换成UNICODE文件?急!!!!
- 高手帮帮忙!!关于用VB函数调用EXCEL表格内容!
Const CP_UTF8 = 65001Private Function ChangeCharToUnion(src As String, destBuff As String) As Long
If Len(destBuff) = 0 Then
Exit Function
End If
Dim result As Long
result = MultiByteToWideChar(CP_UTF8, 0, src, Len(src), destBuff, Len(destBuff))
If result < 0 Then
destBuff = ""
Else
destBuff = Left(destBuff, result * 2)
End If
ChangeCharToUnion = result
End FunctionPrivate Sub Command1_Click()
Dim buff As String * 255
ChangeCharToUnion Text1.Text, buff
Text2 = buff
End Sub
到这里帮我看看好吗?
http://expert.csdn.net/Expert/topic/2650/2650449.xml?temp=.1470148
因为我是要用于winsock从PC发到PAD的(EVB),这个可能大家也没得测试,
希望大家帮忙提点建议,,
到这看看好吗?谢谢
http://expert.csdn.net/Expert/topic/2650/2650449.xml?temp=.1470148
Private Sub cmd_send_Click()
Dim wsSend, sSend
sSend = txt_send.Text
wsSend = StrConv(sSend, vbUnicode)
wsk_client.SendData wsSend
End Sub當在VB6按下傳送按鈕時,將字串轉成UniCode,且傳送出去!
eVB的接收端
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim char1, char2
Dim i As Integer
Dim bData() As Byte '是Byte陣列喔!
WinSock1.GetData bData, vbByte + vbArray
data = ""
For i = 0 To bytesTotal - 1 Step 2
char1 = bData(i)
char2 = bData(i + 1)
If char2 = 0 Then
data = data + Chr(char1)
Else
data = data + ChrB(char1) + ChrB(char2)
End If
Next
txt_get.Text = data
End Sub既然,VB6送出來的是UniCode,那在eVB收到的字串就是UniCode,那直接引用不就得了?不幸的,並不能直接的引用!首先,要用Byte列陣來接收字元。Unicode,是用兩個Byte來表示一個字,如果是英文字,則第二個Byte為"0"(我是這樣認為啦!),所以,必須用上列的程式,把Unicode給串起來!
'eVB的傳送端
Private Sub cmd_send_Click()
'WinSock1.SendData txt_send.Text
Dim i, j
Dim bData() As Byte
Dim strSend, wSend
'j = 0
wSend = txt_send.Text
ReDim bData(Len(txt_send.Text) * 2 - 1)
For i = 0 To Len(txt_send.Text) - 1
bData(j) = AscB(MidB(Mid(txt_send.Text, i + 1, 1), 1, 1))
j = j + 1
bData(j) = AscB(MidB(Mid(txt_send.Text, i + 1, 1), 2, 1))
j = j + 1
Next i
WinSock1.SendData bData
End Sub那eVB在傳送的時候,只要傳送UniCode就行了吧?很抱歉,必須先將要傳送的字轉成16進位,並且要把一個"字"拆成兩個Byte。然後把UniCode的碼放入Byte列陣中,再傳送出去!
'VB6接收端
Private Sub wsk_client_DataArrival(ByVal bytesTotal As Long)
Dim data, adata As String
Dim uStr
Dim i, iPrev
Dim char1
Dim bData() As Byte '是Byte陣列喔!
wsk_client.GetData bData, vbByte + vbArray
If G_Arrival_End Then
ReDim G_Arrival_Data(bytesTotal) '這是第一次收到的
For i = 0 To bytesTotal - 1
G_Arrival_Data(i) = bData(i)
Next i
G_Arrival_End = False
Else
iPrev = UBound(G_Arrival_Data)
ReDim Preserve G_Arrival_Data(bytesTotal + iPrev - 1) For i = 0 To bytesTotal - 1
G_Arrival_Data(i + iPrev) = bData(i)
Next i
G_Arrival_End = True
data = ""
For i = 0 To UBound(G_Arrival_Data) Step 2
data = data + ChrB(G_Arrival_Data(i)) + ChrB(G_Arrival_Data(i + 1))
Next i
txt_receive.Text = txt_receive.Text & data
End IfEnd Sub