Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 конвертация int  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
читаю из поля image целое значение типа WORD: B6 00 00 00

если читать как
select CAST(CAST(0XB6 AS binary(1)) AS tinyint) 
то все верно = 182 байта.

А как положить в int?

select CAST(CAST(0XB6000000 AS binary(4)) AS int)
==> -1241513984 ????
6 фев 15, 01:41    [17225932]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
select CAST(0x000000b6 AS int), CAST(0x00b6 AS smallint)

Thanks
6 фев 15, 02:04    [17225954]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Lepsik
читаю из поля image целое значение типа WORD: B6 00 00 00

если читать как
select CAST(CAST(0XB6 AS binary(1)) AS tinyint) 

то все верно = 182 байта.

А как положить в int?

select CAST(CAST(0XB6000000 AS binary(4)) AS int)

==> -1241513984 ????

B6 00 00 00 - это и есть отрицательное число. В первом бите 32 битного числа 1 - это по любому меньше нуля

А вот если у вас в вашем файле числа кодируются наоборот, то вам нужно перевернуть байтовую строку, поскольку у интеля старший байт всегда спереди, а форматы файлов писались давным давно под порядок байт мотороллы и DEC

select CAST(CAST(REVERSE(0XB6000000) AS binary(4)) AS int)
6 фев 15, 02:05    [17225956]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
alexeyvg,

--B6 00 00 00

это то что hex viewer показывает, понятно что в реальности там все что угодно
6 фев 15, 02:28    [17225981]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Lepsik
alexeyvg,

--B6 00 00 00

это то что hex viewer показывает, понятно что в реальности там все что угодно
Ну вряд ли hex viewer врёт? Или, если врёт, нужно использовать другую программу, например, FAR

Дело то понятное в данном случае - разный порядок байтов: Intel и Motorola. Во многих прогах даже настройка есть, как в файл писать, и в форматах файлов часто есть признак, в каком стиле записываются числа.
6 фев 15, 11:09    [17226941]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
в итоге подобрал.

CREATE function dbo.fn_bin2int(@value binary(4))
returns int
as 
begin
  return cast( ( cast( (right( right(@value,2) ,1) + left(right(@value,2),1) ) as binary(2))
               + cast( (right( left( @value,2) ,1) + left(@value,1) ) as binary(2)) ) as int)
end
go


это из формата файла bmp.
6 фев 15, 17:26    [17229882]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Lepsik
в итоге подобрал.

CREATE function dbo.fn_bin2int(@value binary(4))
returns int
as 
begin
  return cast( ( cast( (right( right(@value,2) ,1) + left(right(@value,2),1) ) as binary(2))
               + cast( (right( left( @value,2) ,1) + left(@value,1) ) as binary(2)) ) as int)
end
go


это из формата файла bmp.


можно же было просто

return  cast(cast(reverse(@value) as binary(4)) as int)
6 фев 15, 17:41    [17229975]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Lepsik
в итоге подобрал.
Прикольно, то же самое, но сложнее.
Вы отвечали, не читая? :-)
6 фев 15, 20:57    [17230768]     Ответить | Цитировать Сообщить модератору
 Re: конвертация int  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Спасибо, синдром рассеянного внимания :)
7 фев 15, 06:59    [17232116]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить