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

火鸟33 2004-04-16 04:05:28
类似的二进制数据,怎么处理阿?
...全文
359 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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';
}
加载更多回复(3)

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧