cari

Rumah  >  Soal Jawab  >  teks badan

python - 同样都是表示十六进制,'0x2d'和'\x2d'有什么区别

如题,这两种表示方法有什么区别。都在什么情况下使用

迷茫迷茫2804 hari yang lalu936

membalas semua(4)saya akan balas

  • PHP中文网

    PHP中文网2017-04-17 13:06:10

    '0x20' 是一个 multi-character character constant 它对应的值是0x30783230

    (注: '0' 'x' '2' 的 ascii 码分别是 0x30 0x78 0x32)
    

    '\x20' 是一个 char 它的值是0x20

    (注: '\x[0-9a-fA-F]{1,2}' 用16进制表示一个char 比如 '\xFF'
         '\[0-7]{1,3}' 用8进制表示一个char 比如 '\100' )
    

    $ cat 1.c

    #include <stdio.h>
    
    int main() {
      int a = '0x20';
      int b = '\x20';
      printf("a = 0x%x\n", a);
      printf("b = 0x%x\n", b);
      return 0;
    }
    

    $ gcc -Wall 1.c

    1.c:4:11: warning: multi-character character constant [-Wmultichar]
       int a = '0x20';
               ^
    

    $ ./a.out

    a = 0x30783230
    b = 0x20
    

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 13:06:10

    你可以认为'0x2d'是语法错误,'\x2d'才是正确的写法。

    具体说'0x2d'不是一个char,而是一个int,它的值是0x30783264或者0x64327830,具体是哪个要看实现。

    C标准这么说:

    3.1.3.4 Character Constants Semantics
    An integer charcter constant has type int [note that it has type char in C++]...The value of an integer character constant containing more than one character...is implementation-defined.

    注意它提到了在C++里这个东西的type是char,据我所知至少VC支持这么写:'\xe5\xad\x97',这是一个UTF-8编码的"字"。

    balas
    0
  • 黄舟

    黄舟2017-04-17 13:06:10

    '\x2d' 主要是用来表是一个不能直接显示的单字节字符的编码

    '0x2d' 应该算是一个标准的16进制表示的字符串,可以通过int('0x2d', 16) 转换为int 类型的值

    balas
    0
  • 阿神

    阿神2017-04-17 13:06:10

    '0x2d'是包含4个字符的字符串吧, '\x2d'表示字符'-'(其ASCII数值为0x2d=45)。

    balas
    0
  • Batalbalas