Задавайте вопросы, мы ответим
Вы не зашли.
В поле binary[4] записано число типа uint32_t. Можно ли как-то SELECT'ом получить его десятичное представление? Нужно что-то вроде reinterpret_cast в c++.
Неактивен
Неактивен
deadka написал:
cast(conv(hex(ИСХОДНОЕ),16,10) as unsigned integer)
не оно?
Не, не оно
CREATE TABLE `threads` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`numb` binary(4) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
В `numb` бинарные данные, 4 байта. Мне нужно определить какое число записано в этих 4-х байтах. Т.е. интерпретировать участок памяти не как char[4], а как uint32_t, или INT, в случае MySQL.
Отредактированно gif-t (18.01.2017 10:46:25)
Неактивен
Приведите запрос, как Вы вставляете в таблицу threads эти 4 байта.
Неактивен
Там бинарные данные, много непечатных символов, символов табуляции, переноса и т.д. Выглядит как-то так:
UPDATE `threads` SET `numb`='@\0 S\'$IWiy
F0XsXd
RSuFg\0\n' WHERE (`id`='1')
В принципе я знаю как решить задачу через ascii, просто думал есть более прямой путь
Отредактированно gif-t (18.01.2017 13:18:04)
Неактивен
А зачем вам *строковое* представление числа в десятеричном виде, если Вы пишете на С++? Сделайте reinterpret_cast? ;-)
Но вообще, deadka привел правильное решение с точки зрения строки. Если в Вашем случае число выдается неправильно, с большой долей вероятности, Вы хотите big endian, а пишете little endian.
Неактивен
Я пишу little endian, а получаю big endian. hex() не переворачивает байты
Неактивен
Т.е. надо так:
SELECT cast(conv(hex(REVERSE('abcd')),16,10) as unsigned integer)
Всех благодарю
Неактивен