怎么把图片按16进制表示出来

itcoco 2005-03-24 04:44:45
怎么把图片按16进制表示出来,然后再能把16进制转成图片?

我把图片另存为txt文件 然后读文件把里边的的内容转成16进制流 并存成16.txt文件 怎么却不能把这个16.txt给再转成图片了
这个是把一个文件转成16进制流
Public Function sReadFile(ByVal sFileNamePath As String) As String
Dim dd$
Dim i As Long
Dim sChr As String
Dim sNewChr As String
Dim sStr As String
Open sFileNamePath For Binary As #1
dd$ = Space(LOF(1))
Get 1, , dd$
Close #1

For i = 1 To Len(dd$)
sChr = Mid(dd$, i, 1)
sNewChr = CStr(Hex(Asc(sChr)))
sStr = sStr + sNewChr
Next 'i
sReadFile = sStr
End Function

我现在不知道怎么把得到的16进制流再能转回去
...全文
835 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
homezj 2005-03-25
  • 打赏
  • 举报
回复
嘿嘿!分析正确!
都格式化成2个字节也行,不过转回去时无法用Split,会慢很多!
itcoco 2005-03-25
  • 打赏
  • 举报
回复
我现在知道为什么要用join函数了 因为图片转16进制的时候 有些字节转成类似的“FF”是两个字符 有些就成了"0"一个字节 加个分割符 是为了能正确的转回去
想法对吧?
xgwt 2005-03-24
  • 打赏
  • 举报
回复
这个代码可以用的
homezj 2005-03-24
  • 打赏
  • 举报
回复
呵!转成文本后,文件扩容3倍!效率不算高,不过能用!试试吧。

Option Explicit

Private Sub Pic2Txt(PicFile As String, TxtFile As String)
Dim s() As String, a() As Byte, FreeNo As Long, i As Long
FreeNo = FreeFile
Open PicFile For Binary As #FreeNo
ReDim a(LOF(FreeNo) - 1)
Get #FreeNo, , a
Close #FreeNo
ReDim s(UBound(a))
For i = 0 To UBound(a)
s(i) = Hex$(a(i))
Next
Open TxtFile For Output As #FreeNo
Print #FreeNo, Join(s, "%")
Close #FreeNo
End Sub
Private Sub Txt2Pic(TxtFile As String, PicFile As String)
Dim s() As String, a() As Byte, FreeNo As Long, txt As String, i As Long
FreeNo = FreeFile
Open TxtFile For Binary As #FreeNo
txt = Input(LOF(FreeNo), FreeNo)
Close #FreeNo
s = Split(txt, "%")
ReDim a(UBound(s))
For i = 0 To UBound(a)
a(i) = "&H" & s(i)
Next
If Dir(PicFile) <> "" Then Kill PicFile
Open PicFile For Binary As #FreeNo
Put #FreeNo, , a
Close #FreeNo
End Sub

Private Sub Command1_Click()
Dim t As Single
t = Timer
Pic2Txt Text1.Text, Text2.Text
Debug.Print "Pic2Txt:" & Timer - t
End Sub

Private Sub Command2_Click()
Dim t As Single
t = Timer
Txt2Pic Text2.Text, Text3.Text
Debug.Print "Txt2Pic:" & Timer - t
End Sub
homezj 2005-03-24
  • 打赏
  • 举报
回复
哎!我给你简单写个代码吧!稍等!
itcoco 2005-03-24
  • 打赏
  • 举报
回复
类似URL或邮件编码方式?这两个编码方式不知道 很复杂么?网上查了下 还牵扯到base64??
//举个最简单的示例:Byte &HFF,换成文本就为%FF。 这里怎么转换Byte &HFF,换成文本就为%FF?
我这样写
dim b as byte
dim s as string
b=&hFF
s=strconv(b,vbfromunicode)
打印出来的是个s
怎么转成%FF?


thirdapple 2005-03-24
  • 打赏
  • 举报
回复
GetDIBits
homezj 2005-03-24
  • 打赏
  • 举报
回复
dd$ = Space(LOF(1))这种读法,VB会自动进行编码转换。
二进制文件若用文本方式处理,历经VB的编码转换,早已面目全非了,绝对不可能再还原!

建议你可以用类似URL或邮件编码方式,以文本保存二进制数据。

举个最简单的示例:Byte &HFF,换成文本就为%FF。
这样就可保存成文本文件,还原时,Split(txt,"%"),就可装入String数组,再用循环放入Byte数组,就可以了。
itcoco 2005-03-24
  • 打赏
  • 举报
回复
或者是怎么把代表图片信息的16进制的流怎么存成图片

7,785

社区成员

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

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