แปลงอักขระเป็นค่าตัวเลข ASCII ใน java


174

ฉันมีString name = "admin";
แล้วฉันจะทำString char = name.substring(0,1); //char="a"

ฉันต้องการแปลงค่าcharเป็น ASCII (97) ฉันจะทำสิ่งนี้ใน java ได้อย่างไร


2
เจดับบลิวจะString charเคยรวบรวม อาจเป็นคุณต้องการเปลี่ยนชื่อตัวแปรเป็นString ch
Vikas Prasad

ASCII? คุณแน่ใจหรือไม่ว่าเป็นสิ่งที่คุณต้องการ Java ใช้การเข้ารหัสอักขระ UTF-16 ของชุดอักขระ Unicode (เช่น JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API, …) คำตอบนั้นแบ่งออกเป็นหลายหมวดหมู่: การตอบเกี่ยวกับ ASCII อย่างชัดเจนการตอบเกี่ยวกับ UTF-16 และการตอบเกี่ยวกับ ASCII ผ่านทางลัดลัดหลายอันจาก UTF-16 (และบางข้อก็ผิดธรรมดา)
Tom Blodget

คำตอบ:


296

ง่ายมาก. เพียงแค่โยนของคุณเป็นcharint

char character = 'a';    
int ascii = (int) 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
เหตุใดจึงสร้างตัวแปรถ่านอีกตัว แม้ว่าคุณต้องการนักแสดงทำไมไม่ทำอย่างนั้น? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ - ตกลงฉันไม่ได้คิดเกี่ยวกับมัน
Ricardo Cacheira

9
อักขระ ASCII มีรหัส 7 บิตตั้งแต่ 0 ถึง 127 ดังนั้นจึงไม่จำเป็นต้องใช้ int ไบต์สามารถเก็บรหัสใด ๆ ได้อย่างสมบูรณ์แบบ
Yahor

ฉันกำลังมองหาการเปลี่ยน int ให้เป็น char คำแนะนำแบบ cast ช่วยให้ฉันทำอย่างอื่นจากคำตอบ
Isidro Serrano Pineda

49

เป็นเพียงแนวทางที่แตกต่าง

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

bytes[0] จะเป็นตัวแทนของ ASCII ของ .. และทำให้ตัวละครอื่น ๆ ในอาร์เรย์ทั้งหมด



12

คำตอบหลายข้อที่แสดงให้เห็นว่าทำสิ่งนี้ผิดทั้งหมดเพราะอักขระ Java ไม่ใช่อักขระ ASCII Java ใช้การเข้ารหัสแบบหลายไบต์ของอักขระ Unicode ชุดอักขระ Unicode เป็นชุดสุดของ ASCII ดังนั้นอาจมีอักขระในสตริง Java ที่ไม่ได้เป็นของ ASCII อักขระดังกล่าวไม่มีค่าตัวเลข ASCII ดังนั้นการถามวิธีรับค่าตัวเลข ASCII ของอักขระ Java นั้นไม่สามารถตอบได้

แต่ทำไมคุณถึงต้องการทำเช่นนี้? คุณจะทำอย่างไรกับมูลค่า

หากคุณต้องการค่าตัวเลขเพื่อให้คุณสามารถแปลงสตริง Java เป็นสตริง ASCII คำถามจริงคือ "ฉันจะเข้ารหัสสตริง Java เป็น ASCII ได้อย่างไร" StandardCharsets.US_ASCIIเพื่อที่จะใช้วัตถุ


2
คำตอบที่สมบูรณ์แบบ การหล่อแบบเป็นเพียงทางลัดที่ไม่ถูกต้อง ดีใจที่คำตอบของคุณเริ่มต้นขึ้นดังนั้นผู้คนจึงไม่เข้าใจแนวคิดผิด
Karthik R

เหตุผลที่ฉันต้องรู้ว่าสตริง ASCII นั้นเป็นเพราะฉันได้รับข้อมูล Unicode ที่เข้ามาในกระบวนการแบ็กเอนด์ที่ต้องการวาง ASCII แท้ๆที่อื่นและฉันต้องใช้เมื่อฉันได้รับ Unicode โดยปกติเมื่อผู้ใช้คัดลอกวางจาก MS Word (เช่นอัญประกาศคู่และเดี่ยวราคาเครื่องหมายขีดกลางยาว ฯลฯ ) พูดถึง StandardCharsets.US_ASCII เป็นสิ่งที่ถูกต้องที่ต้องทำ แต่นั่นไม่ได้บอกผู้ถามดั้งเดิมถึงวิธีการใช้
Tihamer

String คงที่สาธารณะ displayAsciiCode (s String บูลีน useStandard) {String r = ""; ไบต์ [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); สำหรับ (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); สำหรับ (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((ถ่าน) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer

เรียกข้างบนด้วย: String string = "This" is "odd"; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (สตริงจริง)); System.out.println (displayAsciiCode (สตริงเท็จ)); ผลลัพธ์คือ: strings = นี่“ เป็น” odd 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

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 เป็นเอาท์พุท

เครดิตกับสิ่งนี้นี้

ฉันเพิ่งคัดลอกมาที่นี่เพื่อสะดวกสำหรับผู้อื่น




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 สำหรับและstring charหน่วยข้อความใน Unicode คือกราฟซึ่งเป็น codepoint ฐานตามด้วยศูนย์หรือมากกว่าการรวม codepoints codepoint ใน Java ถูกเข้ารหัสใน UTF-16 ซึ่งอาจต้องใช้หนึ่งหรือสองหน่วยรหัส 16 บิต ( char) สำหรับ codepoint หากต้องการย้ำรหัสไกด์พอยน์ดูคำตอบนี้ รหัสควรพร้อมสำหรับ U + 1F91E ที่กำลังจะมาถึงพร้อมกับมือและดัชนีนิ้วกลางครอปเพด codepoint เป็นต้น
Tom Blodget

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

ในขณะที่รหัสนี้อาจตอบคำถามได้ดีกว่าที่จะอธิบายสิ่งที่มันทำและเพิ่มการอ้างอิงบางอย่างไป
ฮามิด Pourjam

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 ชี้ให้เห็นว่า Unicode ของ Java ไม่ได้ตอบสนองกับตัวละครทั้งหมดเพื่อรับค่า 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 ทั้งหมดที่มี
Tom Blodget

@ TomBlodget ฉันเห็นด้วย แต่ฉันคิดว่า OP ต้องการทราบวิธีรับ ASCII การนำเสนอตัวละครที่กำหนด นี่เป็นเพียงการเข้ารหัสเนื่องจากจาวาไม่สามารถทำ ASCII ดิบได้
Karthik R

1

วิธีง่าย ๆ สำหรับสิ่งนี้คือ:

    int character = 'a';

หากคุณพิมพ์ "ตัวอักษร" คุณจะได้รับ 97


1

หรือคุณสามารถใช้ Stream API สำหรับ 1 ตัวอักษรหรือ String เริ่มต้นใน Java 1.8:

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 ของตัวละครเดียวใน String คุณสามารถไป:

(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.

ในกรณีที่คุณต้องการแสดงค่า ascii ของ String ที่สมบูรณ์คุณต้องทำสิ่งนี้

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

ผลลัพธ์ของคุณในกรณีนี้จะเป็น: ค่า ASCII ของ a คือ: 97 ค่า ASCII ของ d คือ: 100 ค่า ASCII ของ m คือ: 109 ค่า ASCII ของ i คือ: 105 ค่า Ascii ของ n คือ: 110


0

วิธีง่ายๆในการทำเช่นนี้คือ:

สำหรับ String ทั้งหมดเข้าสู่ 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)ให้อักขระตัวเดียวของอาร์เรย์สตริง: เมื่อเรากำหนดอักขระแต่ละตัวให้เป็นประเภทจำนวนเต็มคอมไพเลอร์จะแปลงชนิดเป็น

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

สำหรับสิ่งนี้เราสามารถใช้สตริงคลาสได้ทันที

    input.codePointAt(index);

ฉันต้องการให้คำแนะนำเพิ่มเติมอีกหนึ่งข้อเพื่อให้ได้รับการแปลงสตริงทั้งหมดเป็นรหัส ASCII ที่สอดคล้องกันโดยใช้ Java 8 ตัวอย่างเช่น "abcde" ถึง "979899100101"

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.