Pull to refresh

Comments 1

Наблюдательный читатель может спросить: «А как считать crc для посылаемых данных в shell-скрипте?» Думаю, что никак (я находил расчёт только для строк и то на bash, а мы имеем усечённую версию интерпретатора).
Всё правильно, CRC на bash считаются при помощи строк. Для скрипта командной оболочки openwrt такой расчёт может быть выполнен следующим образом:

string="010500060001"

cnt=${#string}
let 'cnt -= 2'

crc=0xFFFF

for i in `seq 0 2 $cnt`; do
      
    crc=$(( crc ^ $((0x${string:$i:2})) ))
	
    for j in `seq 0 7`; do

        c=$(( crc >> 1 ))
        
        if [ $(( crc & 1 )) = 1 ]; then					
		
            let 'c ^= 0xA001'
        fi
        
        crc=$c
    
    done
	
done

printf "0x%04X" "$crc"
Sign up to leave a comment.

Articles