zoukankan      html  css  js  c++  java
  • 编程基础

    字节码和机器码

    机器码
    
    机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。
    
    通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。
    
    字节码
    
    字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。
    
    通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。
    
    编译型语言
    
    程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等
    
    解释型语言
    
    相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行,每执 行一次都要翻译一次。因此效率比较低。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨 平台性好.),比如Python/JavaScript / Perl /Shell等都是解释型语言。
    

    堆和栈

    栈
    由系统分配,速度较快,不会产生内存碎片
    堆
    是由alloc分配的内存,速度比较慢,容易产生内存碎片,不过用起来方便

    python解释器原理

    Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行

    字符编码

    字符是一个信息单位,在计算机里面,一个中文汉字是一个字符,一个英文字母是一个字符,一个阿拉伯数字是一个字符,一个标点符号也是一个字符。
    字符集是字符组成的集合,通常以二维表的形式存在,二维表的内容和大小是由使用者的语言而定,是英语,是汉语,还是阿拉伯语。
    字符编码是把字符集中的字符编码为特定的二进制数,以便在计算机中存储。编码方式一般就是对二维表的横纵坐标进行变换的算法。一般都比较简单,直接把横纵坐标拼一起就完事了。后来随着字符集的不断扩大,为了节省存储空间,才出现了各种各样的算法。
    字符集和字符编码一般都是成对出现的,如ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码,以后统称为编码。Unicode比较特殊,后面细说。

    python 2.7

    #!/usr/bin/env python
    # -*- conding: utf-8 -*-
    
    temp = '李杰' # utf-8
    # 解码,需要指定原来是什么编码
    temp_unicode = temp_decode('utf-8')
    
    temp_gbk = temp_unicode.encode('gbk')
    
    print(temp_gbk)

    python3.5

    #py3,自动转换utf-8  unicode  gbk
    # py3,移除了Python的Unicode类型
    #!/usr/bin/env python
    # -*- conding: utf-8 -*-
    
    temp = '李杰' 
    temp_gbk = temp.encode('gbk')    #一条命令搞定
    print(temp_gbk)
    

      

    进制转换

    整数之间的进制转换:
    10进制转16进制: hex(16)  ==>  0x10
    16进制转10进制: int('0x10', 16)  ==>  16
    类似的还有oct(), bin()
    -------------------
    字符串转整数:
    10进制字符串: int('10')  ==>  10
    16进制字符串: int('10', 16)  ==>  16
    16进制字符串: int('0x10', 16)  ==>  16
    -------------------
    字节串转整数:
    转义为short型整数: struct.unpack('<hh', bytes(b'x01x00x00x00'))  ==>  (1, 0)
    转义为long型整数: struct.unpack('<L', bytes(b'x01x00x00x00'))  ==>  (1,)
    -------------------
    整数转字节串:
    转为两个字节: struct.pack('<HH', 1,2)  ==>  b'x01x00x02x00'
    转为四个字节: struct.pack('<LL', 1,2)  ==>  b'x01x00x00x00x02x00x00x00'
    -------------------
    字符串转字节串:
    字符串编码为字节码: '12abc'.encode('ascii')  ==>  b'12abc'
    数字或字符数组: bytes([1,2, ord('1'),ord('2')])  ==>  b'x01x0212'
    16进制字符串: bytes().fromhex('010210')  ==>  b'x01x02x10'
    16进制字符串: bytes(map(ord, 'x01x02x31x32'))  ==>  b'x01x0212'
    16进制数组: bytes([0x01,0x02,0x31,0x32])  ==>  b'x01x0212'
    -------------------
    字节串转字符串:
    字节码解码为字符串: bytes(b'x31x32x61x62').decode('ascii')  ==>  12ab
    字节串转16进制表示,夹带ascii: str(bytes(b'x01x0212'))[2:-1]  ==>  x01x0212
    字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b'x01x0212'))[2:-1]  ==>  01023132
    字节串转16进制数组: [hex(x) for x in bytes(b'x01x0212')]  ==>  ['0x1', '0x2', '0x31', '0x32']
    选择了奋斗,以后可以随时还有选择安逸的权力。 但选择了安逸,可能以后就不那么轻易还能有选择奋斗的权力。
  • 相关阅读:
    topcoder srm 708 div1
    FBX SDK在vs 2010下面的配置
    Google Protocol Buffer在vs2010下配置
    topcoder srm 709 div1
    topcoder srm 707 div1
    CNN Mnist
    SVM学习笔记5-SMO
    SVM学习笔记4-核函数和离群点的处理
    SVM学习笔记3-问题转化
    如何使用SSL pinning来使你的iOS APP更加安全
  • 原文地址:https://www.cnblogs.com/wtli/p/7679479.html
Copyright © 2011-2022 走看看