sql 里, Int 转二进制 function
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[DecToBin](@Dec Int)
RETURNS VARCHAR(32)
AS
begin
declare @BinStr as varchar(34)
declare @Mod2 as int
declare @Div2 as int
set @Div2 = @Dec / 2
set @Mod2 = @Dec % 2
set @BinStr=''
while @Div2<>0
begin
if @Mod2=0
set @BinStr = @BinStr + '0'
else
set @BinStr = @BinStr + '1'
set @Dec = @Dec / 2
set @Div2 = @Dec / 2
set @Mod2 = @Dec % 2
end
set @BinStr = @BinStr + '1'
return REVERSE(@BinStr + right('00000000000000000000000000000000',32-len(@BinStr)))
end
位序 |
外设状态 |
GPRS |
|
ST定位,天线,电源状态 | ||||
高字一 |
高字二 |
低字一 |
低字二 | |||||
7 |
1 |
|
1 |
ACC(开) |
1 |
已差分定位 |
1 |
GPS已定位 |
6 |
1 |
|
1 |
|
收星数量 范围:0—15 |
D6 D5 1 1 GPS正常 1 0 GPS天线短路 0 1 GPS天线开路 0 0 GPS模块故障 | ||
5 |
1 |
|
1 |
| ||||
4 |
1 |
|
1 |
|
D4 D3 1 1 电源正常 1 0 主电源掉电 0 1 主电源过高过低 | |||
3 |
1 |
|
1 |
| ||||
2 |
1 |
|
1 |
|
1 |
|
D2 D1 D0 0 0 0 新协议标志 1 1 1 原协议标志 | |
1 |
1 |
|
1 |
|
1 |
| ||
0 |
1 |
|
1 |
|
1 |
|
acc 在 高字节第七位.
用这种方法,在 sql 中也可判断位是否为零或 1
( TermStatu & 0x800000 ) = 0x800000
( TermStatu & 0x800000 ) != 0x800000
select * , substring(dbo.DecToBin(TermStatu),9,1) acc from gps_pos where ( TermStatu & 0x800000 ) = 0x800000