VB6 下 Byte与String 相互转换

leo5381544 2008-12-17 02:15:44
最近在用VB6做个系统,会使用到Byte与String相互转换


Dim TemplateData() As Byte
ReDim TemplateData(0 To 511)
.....通过程序给TemplateData赋值

.....需要把TemplateData里的值存入数据库

Dim TemplateStr As String

.....转换过程(不知怎么转换)


请哪位告诉下,谢谢
...全文
2612 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzhgb 2008-12-18
  • 打赏
  • 举报
回复
Dim TemplateData() As Byte
ReDim TemplateData(0 To 511)
'.....通过程序给TemplateData赋值

'.....需要把TemplateData里的值存入数据库
call ByteToDB(TemplateData)'此函数上边回帖了
Dim TemplateStr As String
TemplateStr =ByteToString(TemplateData)'此函数上边回帖
fangmanhua8888 2008-12-18
  • 打赏
  • 举报
回复
學習,同時幫頂......
zzhgb 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leo5381544 的回复:]
用您写的方法,转成String后也不能直接存储至数据库
[/Quote]

字符串不能存数据库,这个说法夸张了啊
即使二进制也能直接存数据库的

'将二进制数据存入数据库
Private sub ByteToDB(ByRef ByteData() As Byte)
Dim rst As New ADODB.Recordset
Dim i As Integer
With oRs
If .State = 1 Then .Close
.ActiveConnection = Conn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open "select * from 表名"
.AddNew
.Fields("字段名").AppendChunk (ByteData)
.Update
.Close
Set rst = Nothing
End With
End sub
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
写入数据库可以先将BYTE字节数组转换为1个16进制的字符串(1024字节长度)储存在数据库中,读取在将字符串每2字节转换为原BYTE字节数组。

Option Explicit
Dim i As Integer
Dim TemplateStr As String
Private Sub Command1_Click()
Dim TemplateData(511) As Byte
For i = 0 To 511
TemplateData(i) = i Mod 256
Next
For i = 0 To 511
If Len(Hex(TemplateData(i))) = 1 Then
TemplateStr = TemplateStr & "0" & Hex(TemplateData(i))
Else
TemplateStr = TemplateStr & Hex(TemplateData(i))
End If
Next
Print UBound(TemplateData)
Print Len(TemplateStr)
End Sub

Private Sub Command2_Click()
Dim TemplateData(0 To 511) As Byte
For i = 1 To Len(TemplateStr) Step 2
TemplateData((i - 1) / 2) = Val("&h" & Mid(TemplateStr, i, 2))
Next
For i = 0 To 511
Print TemplateData(i)
Next
End Sub
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
读写2进制文件:

Option Explicit
Dim i As Integer

Private Sub Command1_Click()
Dim TemplateData(0 To 511) As Byte
For i = 0 To 511
TemplateData(i) = i Mod 256
Next
Open "c:\TEST" For Binary As #1
For i = 0 To 511
Put #1, i + 1, TemplateData(i)
Next
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1
End Sub

Private Sub Command2_Click()
Dim TemplateData(0 To 511) As Byte
Open "c:\TEST" For Binary As #1
For i = 1 To 512
Get #1, i, TemplateData(i - 1)
Print TemplateData(i - 1)
Next
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1
End Sub
leo5381544 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zzhgb 的回复:]
自己一直用,应该没问题的
Public Sub StringToByte(ByVal strIn As String, ByRef bytOut() As Byte)
Dim i As Long
Dim lngLen As Long
lngLen = Len(strIn)
ReDim bytOut(lngLen)
For i = 0 To lngLen - 1
bytOut(i) = CByte(Asc(Mid(strIn, i + 1, 1)))
Next
End Sub

Public Function ByteToString(ByRef bytIn() As Byte) As String
Dim i As Long
Dim s…
[/Quote]


用您写的方法,转成String后也不能直接存储至数据库
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 leo5381544 的回复:]
引用 5 楼 zdingyun 的回复:
引用 3 楼 leo5381544 的回复:
TemplateStr = TemplateData

如果是这样直接赋值,请问如何存到数据库里呢

1楼的方法是将TemplateData字节数组转换为字符串TemplateStr。


这样转后是不能直接存在数据库里
[/Quote]
当然是有问题的,会引起出错。
从你现在的叙述看:
1)可以按你在4楼的设想做
2)也可以将512字节(BYTE)按2进制方式写到文件中。取出同样按2进制方式读取2进制文件。
zzhgb 2008-12-17
  • 打赏
  • 举报
回复
自己一直用,应该没问题的
Public Sub StringToByte(ByVal strIn As String, ByRef bytOut() As Byte)
Dim i As Long
Dim lngLen As Long
lngLen = Len(strIn)
ReDim bytOut(lngLen)
For i = 0 To lngLen - 1
bytOut(i) = CByte(Asc(Mid(strIn, i + 1, 1)))
Next
End Sub

Public Function ByteToString(ByRef bytIn() As Byte) As String
Dim i As Long
Dim strRet As String
strRet = ""
For i = 0 To UBound(bytIn) - 1
strRet = strRet & Chr(bytIn(i))
Next
ByteToString = strRet
End Function
leo5381544 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zdingyun 的回复:]
引用 3 楼 leo5381544 的回复:
TemplateStr = TemplateData

如果是这样直接赋值,请问如何存到数据库里呢

1楼的方法是将TemplateData字节数组转换为字符串TemplateStr。
[/Quote]

这样转后是不能直接存在数据库里
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 leo5381544 的回复:]
TemplateStr = TemplateData

如果是这样直接赋值,请问如何存到数据库里呢
[/Quote]
1楼的方法是将TemplateData字节数组转换为字符串TemplateStr。
leo5381544 2008-12-17
  • 打赏
  • 举报
回复
我是想把TemplateData数组全部存到数据库的某一列中,

后期再读取出来,转换成Byte数组
leo5381544 2008-12-17
  • 打赏
  • 举报
回复
TemplateStr = TemplateData

如果是这样直接赋值,请问如何存到数据库里呢
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
你是将TemplateData数组整个存入数据库?
还是分别存入数据库?
还是上述转换为String存入数据库?

没说清楚。
fj182 2008-12-17
  • 打赏
  • 举报
回复
Byte 可以和 String 只接转换,如:
TemplateStr = TemplateData
如果要考虑编码的问题,使用Strconv

TemplateStr = Strconv(TemplateData,vbUnicode)
第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)
vb.net基础教程 第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)

7,763

社区成员

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

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