作者Killercat (杀人猫™)
看板AndroidDev
标题Re: [问题] 字串转ASCII
时间Sat Jun 15 06:45:38 2013
※ 引述《Xavier (X.avi(er))》之铭言:
: 各位好!
: 想请教一个问题,
: 假设有个字串 "012",
: 有类似 VB 的 Asc() 能一个字一个字转成ASCII码的方法吗?
: 目前能将 '0'、'1'、'2'转成 ASCII码 48、49、50,
: ^^^^^^^^^^^^^
: 字元(char)
: 但是没办法把 "0" 转成 48...
: ^^^^^
: 字串(String)
: 请各位指点迷津了,感谢!
其实这是java的问题, 而且说深可以很深 说浅可以很浅
端看"0"的编码是什麽而定
0目前来讲在UTF-8跟标准ASCII都是占一个byte, 所以方法很简单
虽然对byte操作我们第一个要想到的就是endian... 不过单byte不重要
for(byte b : targetString.getBytes()) {
System.out.println(b & 0xff);
}
这大概就已经是你要的了
再来说到很深的话,UCS-2的"0"是属於multiple byte character
所以不但byte很重要 还要考虑endian...
(byte_array[0]<<8) + (byte_array[1] & 0xff) big endian
(byte_array[1]<<8) + (byte_array[0] & 0xff) little endian
当然UTF-8的multi-byte字元同样也要考虑这玩意 这东西就留给有兴趣的自己玩玩看了
这对於某些加解密来说是非常重要的概念
所以基於endian的问题,事实上我们是不太建议java引入太多不必要的byte操作
当然还是有许多需要byte操作的空间,比方说Serialization, Compress, Encrypt...
但是能用String的话 就让java帮我们解决endian的问题就好
至於为什麽说UCS-2而不是说UTF-16,这又是更深的故事了
UTF-16有4byte的字元..... :3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 119.14.20.94
※ 编辑: Killercat 来自: 119.14.20.94 (06/15 06:59)
1F:推 Xavier:好深奥 QQ 我会仔细研究的~ 囧> 06/15 09:10
2F:→ Xavier:感谢您的回文! 06/15 09:10
3F:→ Killercat:还好吧 你要的应该就只是.getBytes() 跟b&0xff @@a 06/15 10:01
4F:推 Xavier:我是指後半段~ 呵~ 有提到就会想去了解~ 06/15 10:04