Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取整数';s ASCII码_Java_Byte - Fatal编程技术网

Java 获取整数';s ASCII码

Java 获取整数';s ASCII码,java,byte,Java,Byte,有没有什么“更干净”的方法可以做到以下几点 byte b; int chLen = /*for example*/ (int)(Math.random() * 10); b = ("" + (int)(char)chLen).getBytes()[0]; 从本质上讲,它接受一个大于等于0且小于10的int,并获取其ASCII码并将其存储到一个字节中,但看起来有更好的方法。有什么想法吗?也许你正在寻找类似于n+'0',其中n是介于0和9之间的int。下面如何: byte[] bytes = By

有没有什么“更干净”的方法可以做到以下几点

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

从本质上讲,它接受一个大于等于0且小于10的int,并获取其ASCII码并将其存储到一个字节中,但看起来有更好的方法。有什么想法吗?

也许你正在寻找类似于
n+'0'
,其中n是介于0和9之间的
int

下面如何:

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

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

听起来你想要一个从0到9的随机数,然后把它加到“0”,我用它来得到这样一个数

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));
}

要测试这一点,可以使用
System.out.println(chLen);系统输出打印ln(b);System.out.println((char)b)
和第一个和最后一个输出应该是相同的,而中间的输入应该是不同的。或者就此而言,
n |“0”
。由于“0”到“9”的ASCII码是0x30到0x39,因此不需要携带。(并不是说这会在大多数现代机器中为您节省任何周期。)(纠正了打字错误。)是的!非常感谢。不过,这是一个简单的问题。什么?”“0”是
null
(就字符而言),对吗?那么,添加空字符如何改变int.?@dylnmc在许多编程语言中,字节值
0
通常用作空字符串终止符,请不要将其与零字符
'0'
(请注意,单引号将其标记为字符)混淆,当用ASCII编码时,它是十进制值48(或十六进制值0x30)。@dylnmc
'\0'
不是
'0'
哦……明白了!我真傻;所以基本上“0”(当类型转换为int或byte时)被转换为ASCII码——字符的十进制表示形式,“0”(其十进制ASCII码为48)是列表中的第一个,因此
int n
(比如说
n=1
)将添加到48以获得ASCII代码49,它实际上表示“1”。右…还是左?:P我不知道可以将
printf()
与Java一起使用。我认为这是一个C的东西…即使Java是基于C的,我仍然从未见过Java中的
printf(字符串s,对象args)
,就像在C中一样。而且,
(int)(Math.random()*10)
Random rand=new Random();rand.nextInt(10);
我一直使用
min+(int)(Math.Random()+(max-min+1));
但我想这只是偏好的问题。@dylnmc Java在版本(1)中添加了格式化printf(和String.format)5、 至于使用对象而不是静态方法,我想这是一个偏好问题。
'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)