查找Linux发行版中可用的命令或命令集,这些命令或命令集允许我创建脚本以生成文件的校验和。
这个校验和是由构建系统生成的,我无法通过对文件中的每个字节求和,然后将该数字截断为4个字节来控制。
我知道如何使用node.js,perl,python,C / C ++等工具来做这件事,但我需要能够在远程运行的远程运行的Linux发行版上执行此操作,我可以“修改(它在PLC上)。
有什么想法吗?我一直在寻找一段时间,并且找不到任何看起来很简单的东西。
答案 0 :(得分:2)
逐字节求和的解决方案,并使用许多原始shell命令将该数字截断为4个字节。
#! /usr/bin/env bash
declare -a bytes
bytes=(`xxd -p -c 1 INPUT_FILE | tr '\n' ' '`)
total=0;
for(( i=0; i<${#bytes[@]}; i++));
do
total=$(($total + 0x${bytes[i]}))
if [ $total > 4294967295 ]; then
total=$(($total & 4294967295))
fi
done
echo "Checksum: " $total
答案 1 :(得分:0)
如果您只想逐字节求和并将该数字截断为4个字节,则可以使用以下命令。
xxd -p -c 1 <Input file> | awk '{s+=$1; if(s > 4294967295) s = and(4294967295, s) } END {print s}'
使用xxd
命令提取输入文件的hexdump,并添加每个字节以计算总和。如果总和超过2^32-1 = 4294967295
值,则执行按位和操作以截断位。
答案 2 :(得分:-1)