vc怎么向数据库varbinary类型存储数据,现在有个十六进制的字符串,能直接PutCollect进去吗?

 我来答
在晴天的雨伞
2016-05-03 · TA获得超过6869个赞
知道大有可为答主
回答量:5761
采纳率:86%
帮助的人:1231万
展开全部
在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。

解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据。

问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换?

一定会有人立马反问我:为什么不在程序中使用 C# 或者 JAVA 或者 C++ 来处理这个业务呢?

我的回答是:这个我知道,也已经实现了。但在一些特殊的应用环境和业务需求面前(如:对数据的统计、对数据的分析),我必须这么做!

SQL Server 数据库中,实现 varbinary 类型转换成 varchar 类型

这个已经有人实现了,并且处理得相当巧妙。实现的思路是:

每次取得 varbinary 中一个字节的数据,然后除以16 获得高位的4bit数据,再模16获得低位的4bit数据;

分别从固定字符串中以下标的形式匹配对应的字符,最后累加起来即可。

代码如下:

复制代码
--==============================================
-- FUNCTION varbin2hexstr
-- 将 varbinary 类型的数据转换为 varchar 类型
--==============================================

IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
DROP FUNCTION dbo.varbin2hexstr
GO

CREATE function varbin2hexstr(
@bin varbinary(8000)
)returns varchar(8000)
as
begin
declare @re varchar(8000),@i int
select @re='',@i=datalength(@bin)
while @i>0
select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
+@re
,@i=@i-1
-- return('0x'+@re)
return @re
end

GO
复制代码
测试示例:

select dbo.varbin2hexstr(0x1432fabcdef1234567890)
来源:SqlServer中varbinary转换成字符串
追问
怎么用c++实现呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式