Преобразуйте десятичное число в шестнадцатеричный в сценарии оболочки UNIX

MySQL: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с ... at line ...

Эта ошибка часто возникает из-за того, что вы забыли правильно удалить данные, переданные в MySQL-запрос .

Пример того, что не делать («Плохая идея»):

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

Этот код может быть включен в страницу с формой для отправки с URL-адресом например http://example.com/edit.php?id=10 (для редактирования сообщения n ° 10)

Что произойдет, если представленный текст содержит одинарные кавычки ? $query закончится:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

И когда этот запрос будет отправлен в MySQL, он будет жаловаться, что синтаксис неверен, потому что в середине есть отдельная одинарная кавычка.

Чтобы избежать таких ошибок, вы ДОЛЖНЫ всегда избегать данных перед использованием в запросе.

Экранирование данных перед использованием в SQL-запросе также очень важно, потому что если вы этого не сделаете, ваш скрипт будет быть открытым для инъекций SQL. SQL-инъекция может привести к изменению, потере или изменению записи, таблицы или всей базы данных. Это серьезная проблема безопасности!

Документация:

102
задан Steven Penny 2 May 2014 в 12:13
поделиться

6 ответов

echo "obase=16; 34" | bc

, Если Вы хотите отфильтровать целый файл целых чисел, один на строку:

( echo "obase=16" ; cat file_of_integers ) | bc
101
ответ дан Bill Karwin 24 November 2019 в 04:25
поделиться

Попробованный printf(1)?

printf "%x\n" 34
22

существуют, вероятно, способы сделать это со встроенными функциями во всех оболочках, но это было бы менее портативно. Я не проверил POSIX sh спецификации, чтобы видеть, имеет ли он такие возможности.

176
ответ дан Keltia 24 November 2019 в 04:25
поделиться

В zsh можно сделать этот вид вещи:

% typeset -i 16 y
% print $(( [#8] x = 32, y = 32 ))
8#40
% print $x $y
8#40 16#20
% setopt c_bases
% print $y
0x20

Пример, взятый от zsh страница документов об Арифметической Оценке .

я полагаю, что Bash имеет подобные возможности.

3
ответ дан kenorb 24 November 2019 в 04:25
поделиться

Попытка:

printf "%X\n" ${MY_NUMBER}
4
ответ дан Tim Cooper 24 November 2019 в 04:25
поделиться

Шестнадцатеричное в десятичное:

$ echo $((0xfee10000))
4276158464

Десятичное в шестнадцатеричное:

$ printf '%x\n' 26
1a
65
ответ дан 24 November 2019 в 04:25
поделиться

Простите меня, попробуйте это ...

#!/bin/bash
:

declare -r HEX_DIGITS="0123456789ABCDEF"

dec_value=$1
hex_value=""

until [ $dec_value == 0 ]; do

    rem_value=$((dec_value % 16))
    dec_value=$((dec_value / 16))

    hex_digit=${HEX_DIGITS:$rem_value:1}

    hex_value="${hex_digit}${hex_value}"

done

echo -e "${hex_value}"

Пример:

$ ./dtoh 1024
400
5
ответ дан 24 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: