標題:
[發問]
想請問Excel的 chr 函數的問題
[打印本頁]
作者:
luhpro
時間:
2010-12-14 23:17
標題:
想請問Excel的 chr 函數的問題
本帖最後由 luhpro 於 2010-12-14 23:21 編輯
Sub main()
Dim sChar$
Open "C:\test.bin" For Binary As #1
sChar = Right(Chr(18), 1)
Put #1, 1, sChar
sChar = Right(Chr(54), 1)
Put #1, 2, sChar
sChar = Right(Chr(238), 1)
Put #1, 3, sChar
Close #1
End Sub
如上述程式,
想寫入多個指定字元到 二進位 檔案內.
試過 當ascii碼數不大時寫入的字元都正確,
但那個 shr(238) 會變成將 chr(0) 寫入檔案,
即時視窗打上 ?asc(chr(238)) 結果也是 0
但 Excel 中關於 chr 的說明上有註明 :
charcode 引數是一個用來識別某字元的 Long。
數字型態為 Long 不知為何 238 卻轉不出正確的字元呢?
作者:
Min
時間:
2010-12-15 22:59
特殊字元 顯示不出來...
就直接問 ?chr(238) 就顯示不出來了....
我之前有也遇過 是有些電腦可以Print出來 有些不行!
我最後是改其它符號解決~
作者:
luhpro
時間:
2010-12-15 23:59
本帖最後由 luhpro 於 2010-12-16 00:14 編輯
回復
2#
Min
我主要的用途是要寫到 二進位檔 內,
而不是想顯示出來文字,
我試過在同一台電腦中用 C 語言 用 chr() 函數寫入該字元到 二進位檔 是沒問題的.
主要是在公司 Excel 軟體直接可以使用,
但 C 礙於版權問題在公司不能安裝及使用.
此前也已經實現成功其反向作業 : 從二進位檔中還原出本來的數值 :
Sub Main()
Dim iColumn%, iRow%
Dim bData As Byte
Dim lPosition As Long
Close
With Sheets("Sheet1")
lPosition = 1
Open "C:\test.bin" For Random As #1 Len = 1
iColumn = 1
iRow = 1
While Not EOF(1)
Get #1, lPosition, bData
.Cells(iRow, iColumn) = bData
iColumn = iColumn + 1
If iColumn > 256 Then
iColumn = 1
iRow = iRow + 1
End If
lPosition = lPosition + 1
Wend
Close #1
End With
End Sub
我猜測在 MS 的 Basic 上實作應該也不會有問題,
是否是我之前所用的方式錯誤,
亦或有可能是 Excel VBA 本身就實現不出來呢?
----------------------------------------------------------------
補充 :
剛剛又試著用 Random 檔的方式實做成功 :
Sub Main()
Dim iI%
Dim bChar As Byte
Dim lPosition As Long
Close
lPosition = 1
Open "C:\test1.bin" For Random As #1 Len = 1
For iI = 255 To 0 Step -1
bChar = iI
Put #1, lPosition, bChar
lPosition = lPosition + 1
Next iI
Close #1
End Sub
但不知 Binary 檔 (循序寫入, 不用管下個資料要寫到檔案中的第幾個位置) 的開啟方式又要如何實作呢?
作者:
Min
時間:
2010-12-16 00:14
是轉二進位還是轉Ascii?
作者:
luhpro
時間:
2010-12-16 00:18
回復
4#
Min
?
二進位檔不就是寫入字元的 Ascii碼 嗎?
Ascii 範圍 0 ~ 255
作者:
Min
時間:
2010-12-16 06:47
不一樣喔~
二進位 就只有0與1...
http://zh.wikipedia.org/zh/Uuencode
作者:
luhpro
時間:
2010-12-19 19:15
本帖最後由 luhpro 於 2010-12-19 19:19 編輯
回復
6#
Min
這跟我的理解不同呢.
你所給連結中提到的 uuencode 是在郵件系統傳輸的一個 "編碼" 程式,是一種 "二進位" 到 "文字" 的編碼,
所以它並非是一種 "二進制檔案".
若我們從底下這個連結中看 :
文字文件 : http://zh.wikipedia.org/zh-tw/%E6%96%87%E5%AD%97%E6%AA%94 (插入鏈接功能不能用?)
裡面有一段話倒是可以根本闡明所謂的二進制檔案是怎麼回事 :
一般來說,電腦可以分為兩類: 文字文件 和 二進制檔案 。
也就是說只要不是 "文字文件" 的就是 "二進制檔案". (包括 .EXE程式檔 甚至是 .MP4 音訊壓縮檔都是, 差別只在於其用途不同而有其特定的 "識別" 格式存在)
而文字檔案之所以是文字檔案,
在於其定義中有闡明 :
文字文件可以包含 "純文字",透過在文字文件最後一行後放置檔案結束標誌來指明檔案的結束。
在其中除了 換行 LF (0x0D) 與 返首 CR(0x0A) 字元以外,
全部都是 "可視字元".
而 "二進制檔案" 中並非只有可視字元.
回到原主題 :
在 Excel 中若想以 Open binary 指令來建立 "二進制" 檔案,(當純只是想存放 Ascii 碼為 0 ~ 255 的字元資料,而暫不論其格式)
正確的使用方式為何?
另 chr() 函數是否真的只能產生 ascii 碼為 128 以下的字元呢?
若真是如此, 那其說明中所謂的 :
"charcode 的正常範圍為 0-255" 及 "charcode 引數是一個用來識別某字元的 Long"
又有何意義呢?
直接告訴我們其範圍為 0 - 127 與 其格式為 Byte 不就足夠了嗎?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)