亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

既然"不"的編碼是178,187,那么如何從178,187得到字符串"不"?

既然"不"的編碼是178,187,那么如何從178,187得到字符串"不"?

慕勒3428872 2023-04-22 17:13:06
我做了兩個程序:第一個把一個普通文件(不是二進制,是用記事本就能打開的文件,但是里面有許多中文)和一些別的文件加密后保存到另一個二進制文件里;第二個把加密后的文件邊解密邊讀取信息,并不在硬盤上保存任何臨時文件,直接將最原始的那個普通文件中的數據分離到內存中原來是可以的,但要保存臨時文件;現在想改進一下,不保存臨時文件了直接讀取,其中有幾個關鍵的函數:LInputQ函數:類似于Line Input #語句,卻是從二進制文件中讀取一行(以遇到Chr(13)為準);t = &HFF - t Xor Q是解密方法,Q是一個全局Byte變量Public Function LInputQ(ByVal FileNumber As Integer) As StringDim t As ByteGet #FileNumber, , tt = &HFF - t Xor QDo Until t = 13LInputQ = LInputQ & Chr(t)Get #FileNumber, , tt = &HFF - t Xor QLoopGet #FileNumber, , tEnd Function現在,當我用它(LInputQ)去讀取英文時,很正常;但是,一旦遇到中文,就出問題了,返回值有問題,就像" "(四個空格)一樣。比如,原始文件內容為一個“不”字(它的Ascii是13,78),在讀取時就變成了178,187不知道是怎么回事。請大家幫忙,以下是第一個程序的關鍵代碼:(PB是進度條,Wname是是否寫入名稱(不管是否寫入名稱都出現以上問題))Private Sub AppendMix(ByVal OutNumber As Integer, ByVal FileN As String, ByRef PGBR As ProgressBar, Optional Wname As Boolean = True, Optional k As Byte = &H7F)Dim i As Long, fLen As Long, tmp As Byte, st As String * 64Open FileN For Binary As #2If Wname Thenst = Mid(FileN, InStrRev(FileN, "\") + 1) & String(128, " ")Put #1, , stEnd IffLen = LOF(2)Put #1, , CByte(Int(fLen / &H1000000))Put #1, , CByte(Int(fLen / &H10000) Mod &H100)Put #1, , CByte(Int(fLen / &H100) Mod &H100)Put #1, , CByte(fLen Mod &H100)PGBR.Max = fLenFor i = 1 To fLenGet #2, , tmpPut #1, , CByte((&HFF - tmp) Xor k)PGBR.Value = iNext iClose #2End Sub
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

下面是改進后的LInputQ函數,應該可以正確讀取漢字字符的。

Public Function LInputQ(ByVal FileNumber As Integer) As String
Dim t As Byte
Get #FileNumber, , t
t = &HFF - t Xor Q
Do Until t = 13
LInputQ = LInputQ & t
Get #FileNumber, , t
t = &HFF - t Xor Q
Loop
Get #FileNumber, , t
LInputQ = StrConv(LInputQ, vbUnicode)
End Function

查看完整回答
反對 回復 2023-04-25
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

Dim bytes() As Byte
dim lLength as Long
Open "c:\main.exe" For Binary As #1 '讀取字節
lLength=LOF(1)
ReDim bytes(1 To lLength) As Byte
Get 1, , bytes
Close #1

'將文件以十六進制方式輸出到Text1中,這個過程很耗時,130K的文件大概需要2分鐘,而且越到后面速度越慢
Dim strTmp As String
For i = 1 To lLength  
strTmp = strTmp & " " & Hex(bytes(i))
DoEvents
Next
Text1.Text = strTmp

Open "d:\abcd.exe" For Binary As #1 '將字節轉存
Put 1, , bytes
Close #1

End Sub 

這個是以前用過的,你稍微改下就可以用了

查看完整回答
反對 回復 2023-04-25
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

‘不’ 的16進制嗎是 B2 BB
單個字節換成十進制當然是178,187
你的(Ascii是13,78)是如何得來的 

''''''''''''''''''''
如何從178,187得到字符串"不"?:

你把這兩個字節按順序寫到文件里自然就是"不"字了
你都把它拆成字節了還要還原干嘛,中文是以字為單位的
VB的string類型確實很難理解
像VB里的 ‘不A’是用3個字節儲存的 ‘B2 BB 41’

查看完整回答
反對 回復 2023-04-25
  • 3 回答
  • 0 關注
  • 210 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號