台灣最大程式設計社群網站
線上人數
1646
 
會員總數:246133
討論主題:189712
歡迎您免費加入會員
討論區列表 >> ASP >> ASP收到字串,怎麼轉成Hex相加?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ASP收到字串,怎麼轉成Hex相加?
價值 : 50 QP  點閱數:1352 回應數:7
樓主

吳宗穎
門外漢
0 4
50 10
發送站內信

很久沒寫程式,都忘光了~~~
想請問,當我收到一個JSON格式後~~~
{"data":["0A0B0C0D","150A062F"]}
經由前輩的教學與提醒,我會了取得JSON陣列內容了~~

但現在另一個問題想請問,如何把字串分割後轉成16進制後相加?

例如第一個「0A0B0C0D」,事實上是4個byte,

我原本的寫法是A=mid(0A0B0C0D,1,2),B=mid(0A0B0C0D,3,2)

會得到「0A、0B」,原本以為直接用Asc(A)就行,可是這樣會把第1個字元「0」轉成ASCII,並不是「A」。

有人會的嗎?可以提點一下,該怎麼做會比較好?………




搜尋相關Tags的文章: [ Hex ] , [ Chr ] , [ ASP ] ,
本篇文章發表於2016-04-18 18:29
1樓
回應

彩虹
檢舉此回應
我不太懂你的意思耶
1.為什麼要把接收到的值拆開?
2.拆開後,為什麼要相加?
3.相加後,你後續是有打算做什麼事情?

另外
ASC()裡面是放一個字元(char)
你可能要先搞懂
所以如果你用ASC("0A"),他基本上只會抓第一個字元「0」,然後轉成「48」
本篇文章回覆於2016-04-18 19:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

吳宗穎
檢舉此回應
喔要相加的原因在於,這是我們在測試的驗證程式

要檢查對方傳來的資料正不正確,訂好的檢查模式是,16進位的byte相加後,取低位做為checksum。

例如 0A+0B+0C+0D=2E, 最後2個byte應該傳來的資料為2E,要做比對用的~~~

所以有字串轉16進位的函數嗎?……事實上0A指的就是A, 但又有可能會有「12」這個值出現…所以…有點沒方向~~~該用那種函數或寫法來解決這個,驗證程式的問題~~~~
本篇文章回覆於2016-04-18 20:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

吳宗穎
檢舉此回應
簡單的來說,我們設計了一台儀器,會將他量測到的資料,透過網路利用JSON格式,上傳至網站~~~
我是負責網站這段的Demo程式,但實在好久沒碰………
因為這台儀器是學電子的人做的,他傳出來的資料,都是用byte來傳~~所以我收到的資料就會是像這樣{"data":["0A0B0C0D2E",".....","......"]}
A+B+C+D=2E, 我就會檢查,他傳出來最後2個BYTE是否等於2E. 來確定他的資料是對的~~~若不對,我會回傳一個json格式的訊息。

因為很久以前有做過ASP相關的網站,所以想試著自己做看看~~~
但就是遇到很多困難………所以上來發問~~~
本篇文章回覆於2016-04-18 20:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

香帥
檢舉此回應
請參考以下程式碼

以上A是"0A",B是"0B"
計算結果是21
本篇文章回覆於2016-04-18 20:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

彩虹
檢舉此回應
你可以這樣試試看,我剛測試是成功的(你再自行帶入值)

CheckData=Round("&H" & "0A")+Round("&H" & "0B")+Round("&H" & "0C")+Round("&H" & "0D")
If CheckData=Round("&H" & "2E") then
response.write "相等"
else
response.write "不相等"
End If
本篇文章回覆於2016-04-18 20:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

彩虹
檢舉此回應
我再稍為詳細補充一下

先將值轉成十進位
Round("&H" & "0A") 值為10
Round("&H" & "0B") 值為11
Round("&H" & "0C") 值為12
Round("&H" & "0D") 值為13

因此將A、B、C、D相加之後 => 10+11+12+13=46(十進位)

取得46(十進位)之後,有兩個方式來判斷相不相等

1.將46(十進位)轉成16進位來判斷 (可以透過Hex()來轉)
Hex(46) 結果為:2E


2.或者將2E的值轉成十進位來判斷


本篇文章回覆於2016-04-19 09:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

吳宗穎
檢舉此回應
雖然不太懂~~round("&H"+x),就是轉成10進位……我一直對這個函數有點陌生~~~我一直覺得這個函數是四捨五入~~

不過,實際測試後,瞭解~我所需要的關鍵就是這個round("&H"+X)~~~~

已經讓我順利的做完了~~~已完成了我的需求~~

再次感謝~~
本篇文章回覆於2016-04-19 16:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.