vc 中如何读取sql下面image类型的二进制字段值,并将其转化为CString类型,显示在编辑框中? vc 中如何读取sql下面image类型的二进制字段值,并将其转化为CString类型,显示在编辑框中? 请各位多多帮忙! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 main(){ CString x; char buf[256] = "ADFRGfdhgdfhsdfh"; char s[3]; x.Empty(); for ( int i = 0; i < strlen(buf); i++ ) { sprintf(s,"%x", buf[i]); x = x + s + " "; } return 0;}輸出和排格式自己做吧 先用ado recordset的get_Chuncate(写错了哦)获取数据流,为一个variant变量,然后取出variant的blob数据,再转成文本 谢谢楼上的!本人是初学者,对这些知识还很欠缺,希望详细的指点。看了您的回复,还是不太清楚,可以具体一点吗?get_Chuncate怎么用,还有那个blob数据是什么,然后又怎么转化成文本,最好帖一些代码出来...谢谢!!! 写一个你试试,注:不支持UNICODEbool BinaryToString( FieldPtr sp, CString& rStr ){ if( sp == NULL ) return false; long attr = sp->Attributes; if( (attr & adFldLong) != adFldLong) return false;//不是BLOB字段 if( sp->ActualSize <= 0 ){ rStr = ""; return true;//0长度数据 } _variant_t v = sp->GetChunk( sp->ActualSize); //全部数据 if( v.vt != (VT_UI1|VT_ARRAY)) return false;// BLOB肯定是这类型. SAFEARRAY * psa = vt.parray; if( psa == NULL ) return false;// UINT len = ::SafeArrayGetElementSize(psa); BYTE* bp =(BYTE*) rStr.GetBuffer(len+1); for(UINT i = 0; i < len; i++) { if( FAILED(SafeArrayGetElement( psa, &i, bp++ )))break; } *(lp+len) = 0; return true;}////你也可以试试用 _variant_t.ChangeType(VT_BSTR)转换. BCB调用VC动态库 使用回调函数内存泄漏问题 如何在窗口的WM_WINDOWPOSCHANGED消息响应函数里面知道该窗口跳到顶端去了 MFC屏保图片浏览增加下雪效果问题,请教(急) SQL条件查询语句该怎么写? 局域网 读取共享文件夹的下级出错1203? 基于ATL技术的焦点问题,请大虾赐教! 高手帮忙解决下NT Service问题(急死人了) 一个进程对以本地IP bind 多个端口可以吗? 一个菜鸟问题,望大虾门指点 线程返回值问题 一个怪问题~ 到底完成端口之完成key指向的数据结构是不是需要互斥访问?代码见内
CString x;
char buf[256] = "ADFRGfdhgdfhsdfh";
char s[3]; x.Empty(); for ( int i = 0; i < strlen(buf); i++ )
{
sprintf(s,"%x", buf[i]);
x = x + s + " ";
} return 0;
}
輸出和排格式自己做吧
看了您的回复,还是不太清楚,可以具体一点吗?get_Chuncate怎么用,还有那个blob数据是什么,然后又怎么转化成文本,最好帖一些代码出来...谢谢!!!
bool BinaryToString( FieldPtr sp, CString& rStr )
{
if( sp == NULL ) return false;
long attr = sp->Attributes;
if( (attr & adFldLong) != adFldLong) return false;//不是BLOB字段
if( sp->ActualSize <= 0 ){
rStr = "";
return true;//0长度数据
}
_variant_t v = sp->GetChunk( sp->ActualSize); //全部数据
if( v.vt != (VT_UI1|VT_ARRAY)) return false;// BLOB肯定是这类型.
SAFEARRAY * psa = vt.parray;
if( psa == NULL ) return false;//
UINT len = ::SafeArrayGetElementSize(psa);
BYTE* bp =(BYTE*) rStr.GetBuffer(len+1);
for(UINT i = 0; i < len; i++)
{
if( FAILED(SafeArrayGetElement( psa, &i, bp++ )))break;
}
*(lp+len) = 0;
return true;
}
//
//
你也可以试试用 _variant_t.ChangeType(VT_BSTR)转换.