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

火鸟33 2004-04-16 04:05:28
类似的二进制数据,怎么处理阿?
...全文
306 23 打赏 收藏 举报
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
火鸟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)
发帖
数据库

3981

社区成员

VC/MFC 数据库
社区管理员
  • 数据库
加入社区
帖子事件
创建了帖子
2004-04-16 04:05
社区公告
暂无公告