วิธีการแปลงรหัส ASCII (0-255) เป็นอักขระที่สอดคล้องกัน?


136

ฉันจะแปลงรหัส ASCII ใน Java (ซึ่งเป็นจำนวนเต็มจากช่วง [0, 255]) เป็นอักขระ ASCII ที่สอดคล้องกันใน Java ได้อย่างไร

ตัวอย่างเช่น:

65  -> "A"
102 -> "f"

3
นี่ไม่ใช่รายการที่ซ้ำกันตามที่กล่าวไว้ข้างต้น นี่ไม่ใช่การแปลงจากจำนวนเต็ม แต่มาจากถ่าน (ascii)
Chathuranga Chandrasekara

11
ไม่ซ้ำกันของ "วิธีการแปลงจาก int เป็นสตริง" ... อย่างไรก็ตาม FWIW, ASCII เป็นเพียง 7 บิตที่มีค่า [0, 127] ;-)

1
@phooji ฉันคิดว่าโพสต์นั้นเป็นวิธีการแปลง 1 -> "1" ฯลฯ
Belgi

1
@pst - ขยาย ASII ;-)
Belgi

3
@Belgi - คุณจะต้องระบุการเข้ารหัสของคุณอย่างชัดเจนหากคุณต้องการแปลงค่า 128-255 อย่างถูกต้อง คำว่า "ASCII แบบขยาย" ไม่มีความหมาย
McDowell

คำตอบ:


247

สำหรับ MIDP 2 / CLDC 1.1 แพลตฟอร์ม (ซึ่งไม่ได้มีพื้นฐานCharacter.toString(char), stackoverflow.com/a/6210938/923560ให้บริการโซลูชั่นเพิ่มเติม.
Abdull

เหตุผลในการ(char)กำหนดคืออะไร? อีกอย่างทำไมใส่Character.toString(i);ไม่ได้? (Java noob)
Adam Hughes

1
โปรดทราบว่าสิ่งนี้ใช้ไม่ได้กับIntegerประเภทคุณจะได้รับข้อผิดพลาด "java.lang.Integer ไม่สามารถส่งไปยัง java.lang.Character" เพิ่มนักแสดงintก่อนเช่น Character.toString((char)(int)myInteger);
gbmhunter

1
iค่า (0-255) จะมาจาก ISO-8859-1 ชุดอักขระ (ผู้ถามปฏิเสธที่จะระบุว่าต้องการ "ASCII แบบขยาย" ใด [คำที่คลุมเครือ] ยกเว้นการยอมรับคำตอบนี้)
Tom Blodget

60

System.out.println((char)65); จะพิมพ์ "A"


2
เคล็ดลับ REPL: หากคุณใช้ JShell (Java 9) คุณสามารถละเว้น System.out ได้ เพียงพิมพ์(char) 65เพื่อค้นหาว่าเป็นตัวอักษรใด
DavidS

2
คำถามไม่เกี่ยวกับการพิมพ์ แต่เป็นการแปลง
iAmLearning

29

String.valueOf(Character.toChars(int))

สมมติว่าจำนวนเต็มคือเป็นคุณจะพูดว่าระหว่าง 0 และ 255 คุณจะได้รับอาเรย์ด้วยตัวอักษรกลับเดียวจากซึ่งจะกลายเป็นสายเดียวตัวเมื่อผ่านไปCharacter.toCharsString.valueOf

ใช้Character.toCharsเป็นที่นิยมในวิธีการที่เกี่ยวข้องกับการโยนจากintไปchar(เช่น(char) i) สำหรับจำนวนของเหตุผลรวมทั้งที่Character.toCharsจะโยนIllegalArgumentExceptionถ้าคุณล้มเหลวที่จะต้องตรวจสอบจำนวนเต็มในขณะที่นักแสดงจะกลืนข้อผิดพลาด (ต่อกวดขันข้อกำหนดการแปลงดั้งเดิม ) ที่อาจเกิดขึ้นให้ ผลลัพธ์ที่นอกเหนือจากที่คุณต้องการ


สมมติว่าจำนวนเต็มอยู่ในช่วง 0-255 (ตามที่คุณรัฐที่คุณทำ ... และระบุคำถาม) toCharsมันเป็นเรื่องที่ไม่จำเป็นและก่อให้เกิดผลลัพธ์กับการใช้งาน
Stephen C

5
คุณสมบูรณ์ถูกต้องสิ่งที่ต้องการจะเร็วกว่าCharacter.toString((char) i) String.valueOf(Character.toChars(i))การใช้เกณฑ์มาตรฐานอย่างรวดเร็วในการแปลงจำนวนเต็มแบบสุ่ม 1,000,000 จำนวนในช่วงที่กำหนด (100 ครั้งเพื่อความปลอดภัย) บนเครื่องของฉันให้เวลาเฉลี่ย 153.07 นาโนวินาทีเทียบกับ 862.39 นาโนวินาที อย่างไรก็ตามในแอปพลิเคชั่นที่น่าสนใจจะมีสิ่งที่สำคัญกว่ามากในการเพิ่มประสิทธิภาพ มูลค่าที่เพิ่มขึ้นของการจัดการที่ปลอดภัยการจัดการที่กำหนดได้และความสะดวกในการขยายออกนอกช่วง [0,255] ควรจะมีมากกว่าการตีประสิทธิภาพเล็กน้อย
zjs


4
    new String(new char[] { 65 })

คุณจะได้สตริงที่มีความยาวหนึ่งซึ่งอักขระเดี่ยวมีรหัส (ASCII) 65 ในอักขระ Java เป็นชนิดข้อมูลตัวเลข


1

เราสามารถวนซ้ำจาก a ถึง z ได้เช่นนี้

int asciiForLowerA = 97;
int asciiForLowerZ = 122;
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){
    search(sCurrentLine, searchKey + Character.toString ((char) asciiCode));
}

1

วิธีที่ง่ายกว่าในการทำเช่นเดียวกัน:

พิมพ์จำนวนเต็มกับอักขระปล่อยให้int nเป็นจำนวนเต็มจากนั้น:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.

0
    for (int i = 0; i < 256; i++) {
        System.out.println(i + " -> " + (char) i);
    }

    char lowercase = 'f';
    int offset = (int) 'a' - (int) 'A';
    char uppercase = (char) ((int) lowercase - offset);
    System.out.println("The uppercase letter is " + uppercase);

    String numberString = JOptionPane.showInputDialog(null,
            "Enter an ASCII code:",
            "ASCII conversion", JOptionPane.QUESTION_MESSAGE);

    int code = (int) numberString.charAt(0);
    System.out.println("The character for ASCII code "
            + code + " is " + (char) code);

กรุณาอธิบายคำตอบของคุณ
want2learn


-1

นี่คือตัวอย่างที่แสดงให้เห็นว่าการแปลง int เป็น char หนึ่งสามารถกำหนดอักขระที่เกี่ยวข้องกับรหัส ASCII ได้

public class sample6
{
    public static void main(String... asf)
    {

        for(int i =0; i<256; i++)
        {
            System.out.println( i + ". " + (char)i);
        }
    }
}

-1

คำตอบด้านบนใกล้เคียงกับการแก้ปัญหาเท่านั้น นี่คือคำตอบของคุณ:

Integer.decode (Character.toString (ถ่าน c));

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.