在Java中将字符转换为ASCII数值


174

我有String name = "admin";
然后我做String char = name.substring(0,1); //char="a"

我想将转换char为ASCII值(97),如何在Java中执行此操作?


2
JW将会String char编译。您可能想将变量重命名为String ch
Vikas Prasad

ASCII?您确定那是您想要的吗?Java使用Unicode字符集的UTF-16字符编码(就像JavaScript,.NET,VBA,VB4 / 5/6,NCHAR,NVARCHAR,NTFS,Windows API一样)。答案分为几类:显式地回答ASCII,回答UTF-16以及通过从UTF-16进行的一些捷径跃跃来回答ASCII(也有些是完全错误的)。
汤姆·布洛杰特

Answers:


296

很简单。只是把你char当成一个int

char character = 'a';    
int ascii = (int) character;

在您的情况下,您需要首先从String中获取特定的Character,然后进行转换。

char character = name.charAt(0); // This gives the character 'a'
int ascii = (int) character; // ascii is now 97.

虽然强制转换不是明确要求的,但是它提高了可读性。

int ascii = character; // Even this will do the trick.

4
@VKSingla-同意不要求这样做,但是它可以提高可读性,并有助于OP理解。
SudoRahul

1
为什么要创建另一个char变量?即使您想要演员,为什么不那样做呢?int ascii = (int)name.charAt(0);
里卡多·卡奇拉

@RJ-好的,我没有考虑过
Ricardo Cacheira

9
ASCII字符具有从0到127的7位代码。因此,无需使用int。字节可以完美地存储任何代码。
Yahor 2015年

我当时想将int转换为char,强制转换提示帮助我从答案的另一方向进行了转换。
伊西德罗(Isidro Serrano Pineda),

49

只是一种不同的方法

    String s = "admin";
    byte[] bytes = s.getBytes("US-ASCII");

bytes[0] 将代表a ..的ascii,从而代表整个数组中的其他字符。


20

代替这个:

String char = name.substring(0,1); //char="a"

您应该使用该charAt()方法。

char c = name.charAt(0); // c='a'
int ascii = (int)c;

4
只是要记住,“ char”是Java中的保留字。

12

由于Java字符不是ASCII字符,因此旨在显示如何执行此操作的几个答案都是错误的。Java使用Unicode字符的多字节编码。Unicode字符集是ASCII的超集。因此,Java字符串中可能存在不属于ASCII的字符。此类字符没有ASCII数值,因此询问如何获取Java字符的ASCII数值是无法回答的。

但是您为什么仍然要这样做呢?您将如何处理价值?

如果要使用数字值,以便可以将Java String转换为ASCII字符串,则真正的问题是“如何将Java String编码为ASCII”。为此,请使用对象StandardCharsets.US_ASCII


2
完美的答案。类型转换只是捷径,并不准确。一开始就很高兴收到您的答复,因此人们不会误解概念。
Karthik R

我需要知道ASCII字符串的原因是因为我已经将Unicode数据输入到后端流程中,该流程需要将纯ASCII放置在其他地方,而当我获取非Unicode时也需要这样做。通常,当用户从MS Word复制粘贴时(例如,弯曲的双引号和单引号,长破折号等)。提及StandardCharsets.US_ASCII是正确的做法,但这并没有告诉原始发问者如何使用它。
蒂哈默

公共静态String displayAsciiCode(String s,boolean useStandard){String r =“”; byte [] ascii = null; 如果(useStandard){ascii = s.getBytes(StandardCharsets.US_ASCII); for(int i = 0; i <ascii.length; i ++){字节b = ascii [i]; r = r +“” + s.charAt(i)+“ =” +(int)b; }}其他{ascii = s.getBytes(); for(int i = 0; i <ascii.length; i ++){字节b = ascii [i]; r = r +“” + Character.toString((char)ascii [i])+“ =” +(int)b; 返回r; }
Tihamer

用以下代码调用上面的代码:String string =“这个“很”奇怪”;System.out.println(“ strings =” + string); System.out.println(displayAsciiCode(string,true)); System.out.println(displayAsciiCode(string,false)); 结果是:字符串=这是“奇怪的” T = 84 h = 104 i = 105 s = 115 = 32“ = 63 i = 105 s = 115” = 63 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101 T = 84 h = 104 i = 105 s = 115 = 32 ¬ = -30 タ = -128 ワ = -100 i = 105 s = 115 ¬ = -30 タ = -128ン = -99 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101
Tihamer '19

10

如果您想将整个字符串转换为连接的ASCII值,则可以使用此-

    String str = "abc";  // or anything else

    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray())
    sb.append((int)c);

    BigInteger mInt = new BigInteger(sb.toString());
    System.out.println(mInt);

其中您将获得979899的输出。

相信这一点

我只是在这里复制了它,以方便其他人使用。


5

将char转换为int。

    String name = "admin";
    int ascii = name.toCharArray()[0];

另外:

int ascii = name.charAt(0);

3

只需将char转换为int即可。

char character = 'a';
int number = (int) character;

的值为number97。


2
public class Ascii {
    public static void main(String [] args){
        String a=args[0];
        char [] z=a.toCharArray();
        for(int i=0;i<z.length;i++){ 
            System.out.println((int)z[i]);
        }
    }
}

3
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
DimaSan


1

我知道已经以几种形式回答了这个问题,但这是我的一些代码,以期浏览所有字符。

这是从类开始的代码

public class CheckChValue {  // Class name
public static void main(String[] args) { // class main

    String name = "admin"; // String to check it's value
    int nameLenght = name.length(); // length of the string used for the loop

    for(int i = 0; i < nameLenght ; i++){   // while counting characters if less than the length add one        
        char character = name.charAt(i); // start on the first character
        int ascii = (int) character; //convert the first character
        System.out.println(character+" = "+ ascii); // print the character and it's value in ascii
    }
}

}


1
Java将Unicode用于stringchar。Unicode中的文本单位是一个字素,它是一个基本代码点,后跟零个或多个组合代码点。Java中的代码点以UTF-16编码,这可能需要一个或两个16位代码单元(char)作为代码点。要迭代代码点,请参见此答案。例如,即将出现的带有索引和中指交叉点的U + 1F91E手的代码应该已经准备就绪。
汤姆·布洛杰特

1
String str = "abc";  // or anything else

// Stores strings of integer representations in sequence
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray())
    sb.append((int)c);

 // store ascii integer string array in large integer
BigInteger mInt = new BigInteger(sb.toString());
System.out.println(mInt);

尽管此代码可以回答问题,但最好解释一下它的作用并为其添加一些引用。
Hamid Pourjam 2015年

1
String name = "admin";
char[] ch = name.toString().toCharArray(); //it will read and store each character of String and store into char[].

for(int i=0; i<ch.length; i++)
{
    System.out.println(ch[i]+
                       "-->"+
                       (int)ch[i]); //this will print both character and its value
}

1

正如@Raedwald指出的那样,Java的Unicode不能满足所有字符以获取ASCII值的需要。正确的方法(Java 1.7+)如下:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)

new String(byte[])使用另一种字符编码-所谓的系统默认值,它随时间,机器和用户的不同而变化;几乎没有用。您所说asciiString的仍然是UTF-16,因为这就是Java所拥有的全部。
汤姆·布洛杰特

@TomBlodget,我同意。但是我认为OP想要知道如何获取给定字符的ASCII表示。这只是一种编码,因为Java无法执行原始ASCII
Karthik R

1

一个简单的方法是:

    int character = 'a';

如果您打印“字符”,您将得到97。


1

或者,您可以将Stream API用于1个字符或从Java 1.8开始的String:

public class ASCIIConversion {
    public static void main(String[] args) {
        String text = "adskjfhqewrilfgherqifvehwqfjklsdbnf";
        text.chars()
                .forEach(System.out::println);
    }
}

1

使用Java 9 => String.chars()

String input = "stackoverflow";
System.out.println(input.chars().boxed().collect(Collectors.toList()));

输出-[115、116、97、99、107、111、118、101、114、102、108、111、119]


0

您可以使用此代码检查ASCII码。

String name = "admin";
char a1 = a.charAt(0);
int a2 = a1;
System.out.println("The number is : "+a2); // the value is 97

如果我错了,请道歉。


0

如果要获取字符串中所有字符的ASCII值。您可以使用:

String a ="asdasd";
int count =0;
for(int i : a.toCharArray())
    count+=i;

如果要在字符串中使用单个字符的ASCII,可以使用:

(int)a.charAt(index);

0

我在尝试同样的事情,但是最好,最简单的解决方案是使用charAt并访问索引,我们应该创建一个[128]大小的整数数组。

String name = "admin"; 
int ascii = name.charAt(0); 
int[] letters = new int[128]; //this will allocate space with 128byte size.
letters[ascii]++; //increments the value of 97 to 1;
System.out.println("Output:" + ascii); //Outputs 97
System.out.println("Output:" +  letters[ascii]); //Outputs 1 if you debug you'll see 97th index value will be 1.

如果要显示完整String的ascii值,则需要执行此操作。

String name = "admin";
char[] val = name.toCharArray();
for(char b: val) {
 int c = b;
 System.out.println("Ascii value of " + b + " is: " + c);
}

在这种情况下,您的输出将是:a的ascii值为:97 d的ascii值为:100 m的ascii值为:109 i的ascii值为:105 n的ascii值为:110


0

简单的方法是:

对于整个字符串转换为ASCII:


public class ConvertToAscii{
    public static void main(String args[]){
      String abc = "admin";
      int []arr = new int[abc.length()];
      System.out.println("THe asscii value of each character is: ");
      for(int i=0;i<arr.length;i++){
          arr[i] = abc.charAt(i); // assign the integer value of character i.e ascii
          System.out.print(" "+arr[i]);
      }
    }
}


输出为:

THe asscii value of each character is: 97 100 109 105 110


这里,abc.charAt(i)给出String数组的单个字符:然后,当我们将每个字符分配给整数类型时,编译器将类型转换为:

arr[i] = (int) character // Here, every individual character is coverted in ascii value

但是,对于单个字符:

String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);


0

为此,我们可以立即使用String classe

    input.codePointAt(index);

我想再提出一个建议,将整个字符串转换为相应的ascii代码,例如使用java 8,将“ abcde”转换为“ 979899100101”。

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.