[字符串字符显示与16进制显示之间的相互转换函数]字符串字符显示与16进制显示之间的相互转换.四个有用的函数:Function to convert unsigned char to string of length 2void CXXX::Char2Hex(unsigned char ch, char* szHe...+阅读
刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将说明一些常用数据类型的使用。 我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="程佩君"; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2;
一、其它数据类型转换为字符串 短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换 长整型(long) ltoa(l,temp,10); 浮点数(float,double) 用fcvt可以完成转换,这是MSDN中的例子: int decimal, sign; char *buffer; double source = 3.1415926535; buffer = _fcvt( source, 7, &decimal, &sign ); 运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 decimal表示小数点的位置,sign表示符号:0为正数,1为负数 CString变量 str = "2008北京奥运"; buf = (LPSTR)(LPCTSTR)str; BSTR变量 BSTR bstrValue = ::SysAllocString(L"程序员"); char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); AfxMessageBox(buf); delete(buf); CComBSTR变量 CComBSTR bstrVar("test"); char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf); delete(buf); _bstr_t变量 _bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用 _bstr_t bstrVar("test"); const char *buf = bstrVar;///不要修改buf中的内容 AfxMessageBox(buf); 通用方法(针对非COM数据类型) 用sprintf完成转换 char buffer[200]; char c = '1'; int i = 35; long j = 1000; float f = 1.7320534f; sprintf( buffer, "%c",c); sprintf( buffer, "%d",i); sprintf( buffer, "%d",j); sprintf( buffer, "%f",f);
二、字符串转换为其它数据类型 strcpy(temp,"123"); 短整型(int) i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp); CString变量 CString name = temp; BSTR变量 BSTR bstrValue = ::SysAllocString(L"程序员"); ...///完成对bstrValue的使用 SysFreeString(bstrValue); CComBSTR变量 CComBSTR类型变量可以直接赋值 CComBSTR bstrVar1("test"); CComBSTR bstrVar2(temp); _bstr_t变量 _bstr_t类型的变量可以直接赋值 _bstr_t bstrVar1("test"); _bstr_t bstrVar2(temp);
三、其它数据类型转换到CString 使用CString的成员函数Format来转换,例如: 整数(int) str.Format("%d",i); 浮点数(float) str.Format("%f",i); 字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username; 对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。
四、BSTR、_bstr_t与CComBSTR CComBSTR 是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。 char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上comutil.h和comsupp.lib SysFreeString(bstrValue); 反之可以使用 char *p=_com_util::ConvertBSTRToString(b); delete p; 具体可以参考一,二段落里的具体说明。 CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!=,==等操作,所以使用非常方便。 特别是_bstr_t,建议大家使用它。
五、VARIANT 、_variant_t 与 COleVariant VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;///指明整型数据 va.lVal=a; ///赋值 对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: Byte bVal; // VT_UI1. Short iVal; // VT_I2. long lVal; // VT_I4. float fltVal; // VT_R4. double dblVal; // VT_R8. VARIANT_BOOL boolVal; // VT_BOOL. SCODE scode; // VT_ERROR. CY cyVal; // VT_CY. DATE date; // VT_DATE. BSTR bstrVal; // VT_BSTR. DECIMAL FAR* pdecVal // VT_BYREF|VT_DECIMAL. IUnknown FAR* punkVal; // VT_UNKNOWN. IDispatch FAR* pdispVal; // VT_DISPATCH. SAFEARRAY FAR* parray; // VT_ARRAY|*. Byte FAR* pbVal; // VT_BYREF|VT_UI1. short FAR* piVal; // VT_BYREF|VT_I2. long FAR* plVal; // VT_BYREF|VT_I4. float FAR* pfltVal; // VT_BYREF|VT_R4. double FAR* pdblVal; // VT_BYREF|VT_R8. VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL. SCODE FAR* pscode; // VT_BYREF|VT_ERROR. CY FAR* pcyVal; // VT_BYREF|VT_CY. DATE FAR* pdate; // VT_B...
16进制转化为字符
import java.io.UnsupportedEncodingException; import java.util.Scanner;
public class Decoder { public static void main(String[]args){ System.out.println("请输入转换的16进制代码:"); Scanner scan=new Scanner(System.in); String getb=scan.nextLine(); String result=decodeString(getb, "GBK"); System.out.println(result); } private static String decodeString(String string, String encoding) { try { byte[]data=string2Bytes(string); return new String(data, encoding); } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); return null; } } private static byte[] string2Bytes(String string) { int blen=string.length()/2; byte[]data=new byte[blen]; for(int i=0;i 使用这个方法可以传进去的16进制的数字组成的字符串转化为utf-8格式的字符串 public static String toStringHex1(String s) { byte[] baKeyword = new byte[s.length() / 2]; for (int i = 0; i < baKeyword.length; i++) { try { baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring( i * 2, i * 2 + 2), 16)); } catch (Exception e) { e.printStackTrace(); } } try { s = new String(baKeyword, "utf-8");// UTF-16le:Not } catch (Exception e1) { e1.printStackTrace(); } return s; } // 规则:两个十六进制字符转为1个ASCII字符 bool H2String( char* h, int n, CString& str ) { int len = n / 2; char* a = new char[len + 1]; char* p = a; int i = 0; while( i { char c; if( *h '0' ) c = *h - '0'; else if( *h 'a' ) c = 10 + *h - 'a'; else if( *h 'A' ) c = 10 + *h - 'A'; else { delete[] a; return false; } c h++; if( *h = '0' ) c += *h - '0'; else if( *h = 'a' ) c += 10 + *h - 'a'; else if( *h = 'A' ) c += 10 + *h - 'A'; else { delete[] a; return false; } a[i++] = c; h++; } a[len] = 0; str.Format( "%s", a ); delete[] a; return true; } 以下为关联文档: 请教VB6字符串如何转化为16进制BYTE数组VB字符串可通过使用StrConv 函数,将字符串由 Unicode 转成系统的缺省码页后,再获取每个字节的十六进制字符后拼接起来。 StrConv 函数,返回按指定类型转换的 Variant (String)... 计算机中二进制八进制十进制十六进制如何转换求教#include "iostream.h" #include "math.h" void bin(int); void ba(int); void CalHex(int); void main() { long n; cout<<;"请输入任一十进制整数:"; cin>>n; cout<<;"其二进制表... 请教二进制小数怎么转换成十进制小数方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分 为零为止。如果永远不能为零,就同十进制数的... JS如何将科学计数法转换成数字或者字符串首先,需要将科学计数法转换成一下:例如:BigDecimal bd = new BigDecimal("3.40256010353E11"); 然后转换成字符串:String str = bd.toPlainString();如果这个数字的长度是在int的范围... 二进制怎么转换成十进制#includevoid ex10to2(); void ex10to8(); void ex10to16(); void main() { int select; do { printf("\n 0、退出 1、十进制~二进制 2、十进制~八进制 3、十进制~十六进制\n... 二进制怎样转换十进制(1) 二进制数—→十进制数 对于较小的二进制数: 对于较大的二进制数: 方法1:各位上的数乘权求和??例如: (101101)2=1*25+0*24+1*23+1*22+0*21+1*20=45 (1100.1101)2=1*23+1*22+0*21+... 16进制 10进制用英语应该怎么翻译这个地方呢,其实 16hex 是对哦,但10 hex 就不对了,你的感觉还是不错的:) 16进制: hexadecimal (also base 16, or hex) is a positional numeral system with a radix, or base, o... 二进制八进制十进制十六进制的计算及转换二进制八进制十进制十六进制的计算及转换,vb计算器进制转换程序:八转十进制 (31.5)(八) 整数部分: 3*8 (1)+1*8(0)=25 小数部分: 5*8(-1)=0.625 所以(31.5)(八)=(25.625)(十)十转八进制 (25.6... mysql中如何把字符串转换成日期类型mysql中如何把字符串转换成日期类型,mysqlfetchfield和mysqlifetchf:mysql中把字符串转换成日期类型:select date_format('2013-03-09','%Y-%m-%d');select date_format('2013-...如何将16进制数字转换成字符串
如何将十六进制ASCII转化为字符串以CString类型保存