Bash에서는 PHP를 호출하고 다음 명령을 실행할 수 있습니다.
testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(php -r "echo bin2hex('$testKey');")
echo $testHex
이로 인해
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
PHP를 사용할 수 없는 시스템이 있습니다. bash만 사용하여 동일한 결과를 얻을 수 있는 방법이 있습니까?
감사해요
답변1
누워 있는 경우 hexdump
:
$ printf "%s" "$testKey" | hexdump -ve '/1 "%x"'
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
-e
hexdump
"큰따옴표(")로 묶어야 하는 형식 문자열을 설정합니다 . /1
형식 문자열은 한 번에 1바이트를 사용하여 %x
16진수로 인쇄합니다(그렇지 않으면 바이트 순서로 인해 다른 출력이 발생할 수 있음) -v
. 기본값은 )로 바꾸는 것입니다 *
.
답변2
예, xxd
동일한 작업을 수행할 수 있습니다.
testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(echo -n "${testKey}" | xxd -p -c 100)
-p 플래그는 오프셋 정보가 없는 16진수 덤프에 사용됩니다.
-c 100 플래그는 100자(기본값 16, 최대 256)의 행 길이에 적용됩니다.
답변3
"Just bash"로 다음 트릭을 사용하십시오.BASH 인쇄 문제(printf \$(printf '%03o' $1))
$ for ((i=0;i<${#testKey};i++)); do printf '%x' "$(printf "'%c" "${testKey:i:1}")"; done; echo
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
펄을 사용하여unpack
$ perl -E 'say unpack "H*", $ARGV[0]' "$testKey"
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736