高分请教,怎么把数据中binary字符串,转化为0x开头的16进制形式的字符串?

火鸟33 系统架构师  2004-04-16 04:05:28
类似的二进制数据,怎么处理阿?
...全文
226 点赞 收藏 23
写回复
23 条回复
火鸟33 2004年04月21日
insert into table (testbinary) values (0x00123124)

就这样,0x00123124 是从上面的程序转化出来的
回复 点赞
runall 2004年04月17日
mark
回复 点赞
wwjj007 2004年04月17日
请问楼主,你是如何用程序的方式实现将值存入BINARY字段中
回复 点赞
zhangcrony 2004年04月17日
已经清楚了,那就顶一下
回复 点赞
火鸟33 2004年04月17日
char *pTmp = NULL;
需要改为 unsigned char *pTmp = NULL;
不然会丢失8以上的字符
回复 点赞
laker_tmj 2004年04月17日
up learn
回复 点赞
火鸟33 2004年04月17日
char *sBinary;
改为 char sBinary[258];
回复 点赞
火鸟33 2004年04月17日
自己解决了,结果完全一致:
_variant_t varBLOB;
char *pTmp = NULL;
char *sBinary;
sprintf(sBinary,"%s","0x");
long nSize = pRst->GetFields()->GetItem(tmpstr1.c_str())->ActualSize;
varBLOB = pRst->GetFields()->GetItem(tmpstr1.c_str())->GetValue();

//write bin file
//声明安全数组
::SafeArrayAccessData(varBLOB.parray, (void **)&pTmp);

for(int j=0;j<nSize;j++)
{
int nTmp = pTmp[j];
sprintf(sBinary + j*2 + 2,"%02X",nTmp);
};
sBinary[nSize*2+2] = '\0';
::SafeArrayUnaccessData(varBLOB.parray);

cout<<sBinary<<endl;

自己看了下VARIANT的说明文档,对于不是一个单位的数据,如不是单字符,单int,单float等等,数据都放在parray的pvData数组中,但是这个不能直接访问,要通::SafeArrayAccessData
做连接才能访问,基本是这样。
回复 点赞
火鸟33 2004年04月17日
Delphi可以,不知道怎么实现的
回复 点赞
itmaster 2004年04月17日
学习
回复 点赞
runall 2004年04月17日
帮你up
这个问题很老了,可是我也没有看见谁有解决方法
回复 点赞
火鸟33 2004年04月17日
up
回复 点赞
火鸟33 2004年04月16日
表:
CREATE TABLE [TestBinary] (
[RecID] [int] IDENTITY (1, 1) NOT NULL ,
[vb] [binary] (8) NOT NULL CONSTRAINT [DF_TestBinary_vb] DEFAULT (0x00),
[SendFlag] [bit] NOT NULL CONSTRAINT [DF_TestBinary_SendFlag] DEFAULT (0),
CONSTRAINT [PK_TestBinary] PRIMARY KEY CLUSTERED
(
[RecID]
) ON [PRIMARY]
) ON [PRIMARY]
GO

插入数据:
INSERT INTO TestBinary (vb) VALUES (0x1234567891234567)

现在要在程序中把0x1234567891234567这个串打印出来,谁能,我给300分,
我能取出串,但是值不知道变成社么廖(不知道取那里还是还要再次变换?)。


回复 点赞
火鸟33 2004年04月16日
是binary 不是BLOB字段 上面代码通不过的,呵呵

普通的存在数据库中的二进制字符串
回复 点赞
xuanzg 2004年04月16日
怎么从_variant_t搞出来:



//blob 型纪录字段
if(viValue.vt == (VT_ARRAY | VT_UI1))
{
//得到数据长度
long lDatalen = m_pRecordset->GetFields()->GetItem(viIndex)->ActualSize;
//得到二进制数据
viValue = m_pRecordset->GetFields()->GetItem(viIndex)->GetChunk(lDatalen);;
char *pTmp = NULL;

//write bin file
//声明安全数组
::SafeArrayAccessData(viValue.parray, (void **)&pTmp);

CString cszbFileName;
CFile fileBlob;

//设置二进制文件路径
cszbFileName.Format("%s\\%d_%d.bin", ::GetDirFormFileName(cszFilename), dwRecordID, i);
fileBlob.Open(cszbFileName, CFile::modeCreate|CFile::modeWrite, NULL);
fileBlob.Write(pTmp, lDatalen);
fileBlob.Close();

::SafeArrayUnaccessData(viValue.parray);
回复 点赞
shenke410 2004年04月16日
gufengduyu(聪明的呆呆龙) 厉害!
回复 点赞
xuanzg 2004年04月16日
void Cnethlp::BufToHex(BYTE * Instr, BYTE * OutStr,long len)
{
CString cszRc;
for(long i(0); i< len; i++)
{
CString cszTmp;
cszTmp.Format("%02X", Instr[i]);
cszRc += cszTmp;
}
strcpy((char*)OutStr, (char*)(LPCTSTR)cszRc);
}
回复 点赞
火鸟33 2004年04月16日
这个我知道,问题是我的数据在_variant_t 中(从ado中读出的),怎么从_variant_t搞出来
回复 点赞
ymbymb 2004年04月16日
char c = 'A';
CString str;
str.Format("0x%02X");
回复 点赞
gufengduyu 2004年04月16日
//char* chOld为二进制字节串的指针
//char* chNew为输出的字符串,调用时传入一个够大得字符串数组即可
//nLen为二进制字节串的长度
int Convert_BinByteToHex(char* chOld, char* chNew ,int nLen)
{
int i;
int nTemp;
unsigned char cTemp;
for(i = 0; i < nLen; i++){
cTemp = chOld[i];
nTemp = cTemp;
sprintf(chNew + i*2, "%02x", nTemp);
}

chNew[nLen*2] = '\0';
}
回复 点赞
发动态
发帖子
数据库
创建于2007-09-28

3444

社区成员

3.9w+

社区内容

VC/MFC 数据库
社区公告
暂无公告