2014-07-12 53 views
0

有沒有「乾淨」的方法來做到以下幾點?獲取一個int的ASCII碼

byte b; 
int chLen = /*for example*/ (int)(Math.random() * 10); 
b = ("" + (int)(char)chLen).getBytes()[0]; 

此,基本上,採用int是> = 0和< 10和獲取其ASCII碼,並將其存儲到一個字節,但它看起來像有一個更好的方法。有任何想法嗎???

+0

要測試這個,你可以使用 'System.out.println(chLen); System.out.println(b); System.out.println((char)b);' 第一個和最後一個輸出應該是相同的,而中間輸入應該是不同的。 – dylnmc

回答

2

也許你正在尋找類似n + '0'的東西,其中n是0到9之間的int

+0

或者就此而言,'n | 「0''。由於'0'到'9'的ASCII碼是0x30到0x39,所以你不需要攜帶。 (並不是說這會爲大多數現代機器節省任何週期。)((錯字更正。)) – keshlam

+0

是!謝謝。快速的問題,但。什麼? '0'是'null'(以char的形式),對吧?那麼,如何添加空字符改變整數...? – dylnmc

+0

@dylnmc儘管在許多編程語言中,byte * value *'0'通常用作空字符串終結符,但不要將其與0 *字符*''0'混淆(注意單引號將其標記爲字符),當以ASCII編碼時是十進制值48(或十六進制值0x30)。 – Turix

0

如何如下:

byte[] bytes = ByteBuffer.allocate(4).putInt(chLen).array(); 

for (byte b : bytes) { 
    System.out.format("0x%x ", b); 
} 
0

這聽起來像你想從0到9,然後將其添加到「0」的隨機數,我會使用Random.nextInt(10)得到這樣一個數字,

Random rand = new Random(); 
int ch = '0' + rand.nextInt(10); 
System.out.printf("'%s' = %d (dec), %s (hex)%n", 
    String.valueOf((char) ch), ch, 
    Integer.toHexString(ch)); 

因爲它是難以調試隨機碼,我也寫了一個簡單的單元測試,

for (int ch = '0'; ch <= '9'; ch++) { 
    System.out.printf("'%s' = %d (dec), %s (hex)%n", 
     String.valueOf((char) ch), ch, 
     Integer.toHexString(ch)); 
} 

輸出I s

'0' = 48 (dec), 30 (hex) 
'1' = 49 (dec), 31 (hex) 
'2' = 50 (dec), 32 (hex) 
'3' = 51 (dec), 33 (hex) 
'4' = 52 (dec), 34 (hex) 
'5' = 53 (dec), 35 (hex) 
'6' = 54 (dec), 36 (hex) 
'7' = 55 (dec), 37 (hex) 
'8' = 56 (dec), 38 (hex) 
'9' = 57 (dec), 39 (hex) 
+0

:P我不知道你可以在Java中使用'printf()'。我認爲這是一個C語言的東西......儘管Java是基於C語言的,但我仍然沒有在Java中看到類似於C語言的'printf(String s,Object args)'。另外,不是'(int) (Math.random()* 10)'與Random rand = new Random()相同*精確* *; rand.nextInt(10);''我一直使用'min +(int)(Math.random()+(max - min + 1));'但我想這只是一個偏好問題。 – dylnmc

+0

@dylnmc Java在版本(1.)中添加了格式化的printf(和String.format)5;至於使用對象而不是靜態方法,那麼 - 我想這是一個偏好問題。 –