2017年12月31日日曜日

誰の役に立つわけでないPythonのTips

フラグが立つまで待つ
 0x20はフラグの位置。
while (readdata(xx) & 0x20 ) :
        continue


2の補数の符号判断
 16ビットの例。ビット数に合わせて0と1の数を増減
def sign16(x):
        return ( -(x & 0b1000000000000000) | (x & 0b0111111111111111) )

バイト・スワップ
def swap16(x):
        return (((x <<8) & 0xff00) | ((x >> 8 ) & 0x00ff))

ビット反転
 16ビット長。長さがわかっているとき。
data ^ 0xffff

ビット反転して、LSBに1を加える
~data ^ 0xffff  //違ってるかな

数値データを1と0の文字列で得る
 dataの上位が 0のときは0がなくなるので、完全な1,0の文字列にはならない。
bin(data)[2:]
 元に戻す
hex(int(bin(data)[2:],2))

数値の長さの1を得る
len(bin(data)[2:])
マスクを作る
int(("1"*(len(bin(data)[2:]))),2))
任意長の数値のビット反転。ただし、先頭に1がくる数値。
data ^ int(("1"*(len(bin(data)[2:]))),2))

移動平均
 切り出しただけ。

datas=[]
while 1:
                if len(datas)<10 :
                        datas.append(readADC())
                else:
                        del datas[0]
                idou = sum(datas)/len(datas)
                print round((Vref * (sign16(int(hex(idou),16))) / 32767.0),5),"V "

for文
for i  in range(10) 0~9まで

for i in range (1,10) 1~9まで

for i in range (2,10,3) 2~10まで、ステップ3。結果2,5,8

 for (i,x) in enumerate(data)
data='1101'であれば、最初に1を取り出す。(0,1) (1,1),(2,0),(3,1)
data=['Spring', 'Summer', 'Fall', 'Winter'] Springを最初に取り出す。

-----
イテレート(iterator) 反復


イテレーション

イテラブル (iterable) 
イテラブルからリストを生成  list(range(5))

タプル 組 カンマで値を区切ったリストのようなもの。要素を変更ができない?

CRC8-ATM

def crc8atm(data) : #data=0x654321
        data =data <<8
        length = len(bin(data)[2:])
        for i in range(length):
                if int(bin(data)[2:3],2) == 1 : #MSB =1
                        nokori = bin(data)[11:]
                        sentou = (int(bin(data)[2:11],2)) ^ (int('100000111',2))
                        data = int((str(bin(sentou)[2:11])+str(nokori)),2)
                data=int(bin(data),2) #MSB=0
                if len(str(bin(data)[2:]))<9:

                        return(hex(data))


0 件のコメント:

コメントを投稿