SQLinfo.ru - Все о MySQL PG day 17

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.01.2017 10:09:09

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Приведение типов

В поле binary[4] записано число типа uint32_t. Можно ли как-то SELECT'ом получить его десятичное представление? Нужно что-то вроде reinterpret_cast в c++.

Неактивен

 

#2 18.01.2017 10:14:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2055

Re: Приведение типов

cast(conv(hex(ИСХОДНОЕ),16,10) as unsigned integer)

не оно?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 18.01.2017 10:44:32

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: Приведение типов

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)

Неактивен

 

#4 18.01.2017 10:56:06

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2055

Re: Приведение типов

Приведите запрос, как Вы вставляете в таблицу threads эти 4 байта.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 18.01.2017 12:23:27

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: Приведение типов

Там бинарные данные, много непечатных символов, символов табуляции, переноса и т.д. Выглядит как-то так:

UPDATE `threads` SET `numb`='@\0    S\'$IWiy     
F0XsXd
RSuFg\0\n'
WHERE (`id`='1')

В принципе я знаю как решить задачу через ascii, просто думал есть более прямой путь

Отредактированно gif-t (18.01.2017 13:18:04)

Неактивен

 

#6 18.01.2017 14:24:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6610

Re: Приведение типов

А зачем вам *строковое* представление числа в десятеричном виде, если Вы пишете на С++? Сделайте reinterpret_cast? ;-)

Но вообще, deadka привел правильное решение с точки зрения строки. Если в Вашем случае число выдается неправильно, с большой долей вероятности, Вы хотите big endian, а пишете little endian.

Неактивен

 

#7 18.01.2017 15:17:47

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: Приведение типов

Я пишу little endian, а получаю big endian. hex() не переворачивает байты

Неактивен

 

#8 18.01.2017 15:25:47

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: Приведение типов

Т.е. надо так:

SELECT cast(conv(hex(REVERSE('abcd')),16,10) as unsigned integer)

Всех благодарю

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson