16进制转换成字符工具。或者是方法。能用即采纳。

\u5b9e\u73b0\u65e0\u7b26\u53f7\u6574\u6570\u523016\u8fdb\u5236\u8868\u793a\u5b57\u7b26\u4e32\u7684\u8f6c\u6362\uff0c\u8981\u6c42\u4e0d\u80fd\u8c03\u7528\u4efb\u4f55\u51fd\u6570\u3002\u7a0b\u5e8f\u5982\u4e0b\uff0c\u6c42\u6ce8\u91ca\uff0c\u8d8a\u8be6\u7ec6\u8d8a\u597d\u3002

#include
void intToHex(int n, char* s)
{
int temp = 0; \u4e00\u4e2a\u5c40\u90e8\u53d8\u91cf\uff0c\u4fdd\u5b58\u53d8\u6362\u7684\u4e2d\u95f4\u7ed3\u679c
char t[128]; \u4e34\u65f6\u53d8\u91cf\uff0c\u8bb0\u5f55\u53d8\u6362\u7ed3\u679c
int index = 0; \u8bb0\u5f55\u76ee\u524d\u64cd\u4f5c\u5b57\u7b26\u4e32\u7684\u5f53\u524d\u4f4d\u7f6e\uff0c\u5f00\u59cb\u4e3a0
while(n) \u5982\u679cn\u4e0d\u7b49\u4e8e0\uff0c\u5219\u7ee7\u7eed\u5faa\u73af
{
temp = n % 16; temp\u7b49\u4e8en\u9664\u4ee516\u540e\u7684\u4f59\u6570
if(temp > 9) \u5982\u679c\u4f59\u6570\u5927\u4e8e9
{
*(t + index++) = 'A' + temp - 10; \u5982\u679ctemp=10\uff0c\u5219\u5f53\u524d\u4f4d\u7f6e=A\uff0c11\u4e3aB\uff0c12\u4e3aC\uff0c13\u4e3aD\uff0c14\u4e3aE\uff0c15\u4e3aF \uff0c\u540c\u65f6index+1\uff0c\u6307\u5411\u5b57\u7b26\u4e32\u64cd\u4f5c\u7684\u4e0b\u4e00\u4f4d \u5982\u679c\u4f60\u77e5\u9053ASCII\u7801\u8868\uff0c\u4f1a\u5f88\u5bb9\u6613\u7406\u89e3\uff0c\u5982\u679c\u4e0d\u77e5\u9053\uff0c\u90a3\u4f60\u5fc5\u987b\u5b66\u4e60\u4e00\u4e0b\u3002\u4e0d\u61c2ASCII\u662f\u4e0d\u53ef\u80fd\u5b66\u597d\u7f16\u7a0b\u7684
}
else \u5982\u679c\u4e0d\u5927\u4e8e9
{
*(t + index++) = '0' + temp; \u90a3\u4e48\u8fd9\u4f4d\u662f\u591a\u5c11\u5c31\u5411\u5b57\u7b26\u4e32\u4e2d\u5199\u5165\uff0c\u591a\u5c11\u540c\u65f6index+1\uff0c\u6307\u5411\u5b57\u7b26\u4e32\u64cd\u4f5c\u7684\u4e0b\u4e00\u4f4d\u3002\u8fd9\u4e2a\u4e5f\u548cASCII\u6709\u5173
}
n /= 16; \u7528n\u9664\u4ee516\uff0c\u7136\u540e\u628a\u5546\u8d4b\u7ed9n
} \u5f53n\u7b49\u4e8e0\u65f6\uff0c\u5faa\u73af\u7ed3\u675f\uff0cindex\u4e2d\u8bb0\u5f55\u4e86\u5b57\u7b26\u4e32\u7684\u957f\u5ea6
*(t + index) = '\0'; \u5728\u5f53\u524d\u4f4d\u7f6e\u5199\u5165\u5b57\u7b26\u4e32\u7ed3\u675f\u6807\u8bb0
int j = 0;
for(int i = index - 1; i >= 0; --i) \u5faa\u73af\uff0c\u628a\u53d8\u6362\u7ed3\u679c\u7684\u6bcf\u4e2a\u5b57\u7b26\u8d4b\u7ed9s\uff0c\u7528\u4e8e\u8fd4\u56de\u7ed9main\u51fd\u6570
{
*(s + j++) = *(t + i);
}
*(s + j) = '\0';
}
int main(void)
{
char s[128]; \u58f0\u660e\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0c\u7528\u4e8e\u4fdd\u5b58\u7ed3\u679c
int n; \u6574\u5f62\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u8f93\u5165\u6570\u636e
printf("Input a unsigned integer: "); \u5c4f\u5e55\u4e0a\u663e\u793a\u63d0\u793a\u8f93\u5165
scanf("%d", &n); \u7528\u952e\u76d8\u8f93\u5165\u4e00\u4e2a\u6574\u6570\uff0c\u5e76\u5b58\u5165\u53d8\u91cfn
intToHex(n, s); \u628an\u4e2d\u7684\u6574\u6570\u53d8\u621016\u8fdb\u5236\u5b57\u7b26\u4e32\uff0c\u5e76\u628a\u7ed3\u679c\u5b58\u5165\u5b57\u7b26\u4e32s
printf("Your input: %s\n", s); \u663e\u793a\u53d8\u6362\u7ed3\u679c
return 0;
}
\u8fd9\u4e2a\u7a0b\u5e8f\u8fd8\u6709\u4e00\u4e2a\u6f0f\u6d1e\uff0c\u5c31\u662f\u5728\u8c03\u7528intToHex\u524d\u5e94\u5224\u65ad\u8f93\u5165\u7684\u6574\u6570\u5e94\u5927\u4e8e0\uff0c\u56e0\u4e3a\u8be5\u7b97\u6cd5\u662f\u8f6c\u6362\u6574\u6570\u7684\u3002

刚接触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_BYREF|VT_DATE.
BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
void FAR* byref; // Generic ByRef.
char cVal; // VT_I1.
unsigned short uiVal; // VT_UI2.
unsigned long ulVal; // VT_UI4.
int intVal; // VT_INT.
unsigned int uintVal; // VT_UINT.
char FAR * pcVal; // VT_BYREF|VT_I1.
unsigned short FAR * puiVal; // VT_BYREF|VT_UI2.
unsigned long FAR * pulVal; // VT_BYREF|VT_UI4.
int FAR * pintVal; // VT_BYREF|VT_INT.
unsigned int FAR * puintVal; //VT_BYREF|VT_UINT.

_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
使用时需加上#include <comdef.h>
例如:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;

六、其它一些COM数据类型

根据ProgID得到CLSID
HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid);
CLSID clsid;
CLSIDFromProgID( L"MAPI.Folder",&clsid);

根据CLSID得到ProgID
WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID);
例如我们已经定义了 CLSID_IApplication,下面的代码得到ProgID
LPOLESTR pProgID = 0;
ProgIDFromCLSID( CLSID_IApplication,&pProgID);
...///可以使用pProgID
CoTaskMemFree(pProgID);//不要忘记释放

七、ANSI与Unicode
Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。

将ANSI转换到Unicode
(1)通过L这个宏来实现,例如: CLSIDFromProgID( L"MAPI.Folder",&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
char *szProgID = "MAPI.Folder";
WCHAR szWideProgID[128];
CLSID clsid;
long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
szWideProgID[lLen] = '\0';
(3)通过A2W宏来实现,例如:
USES_CONVERSION;
CLSIDFromProgID( A2W(szProgID),&clsid);
将Unicode转换到ANSI
(1)使用WideCharToMultiByte,例如:
// 假设已经有了一个Unicode 串 wszSomeString...
char szANSIString [MAX_PATH];
WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
(2)使用W2A宏来实现,例如:
USES_CONVERSION;
pTemp=W2A(wszSomeString);
八、其它

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam);///取低16位
WORD hiValue = HIWORD(lParam);///取高16位

对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue);///取低8位
BYTE hiValue = HIBYTE(wValue);///取高8位

两个16位数据(WORD)合成32位数据(DWORD,LRESULT,LPARAM,或WPARAM)
LONG MAKELONG( WORD wLow, WORD wHigh );
WPARAM MAKEWPARAM( WORD wLow, WORD wHigh );
LPARAM MAKELPARAM( WORD wLow, WORD wHigh );
LRESULT MAKELRESULT( WORD wLow, WORD wHigh );

两个8位的数据(BYTE)合成16位的数据(WORD)
WORD MAKEWORD( BYTE bLow, BYTE bHigh );

从R(red),G(green),B(blue)三色得到COLORREF类型的颜色值
COLORREF RGB( BYTE byRed,BYTE byGreen,BYTE byBlue );
例如COLORREF bkcolor = RGB(0x22,0x98,0x34);

从COLORREF类型的颜色值得到RGB三个颜色值
BYTE Red = GetRValue(bkcolor); ///得到红颜色
BYTE Green = GetGValue(bkcolor); ///得到绿颜色
BYTE Blue = GetBValue(bkcolor); ///得到兰颜色

九、注意事项
假如需要使用到ConvertBSTRToString此类函数,需要加上头文件comutil.h,并在setting中加入comsupp.lib或者直接加上#pragma comment( lib, "comsupp.lib" )
另外,虚机团上产品团购,超级便宜

打开电脑自带的计算器-->点击查看-->点击科学型-->做你要做的吧。

有卖这样计算器的,也应该有这样的软件啊.

  • UltraEdit濡備綍鎶16杩涘埗鏁杞负瀛楃?
    绛旓細6銆佸湪鏂版枃浠朵腑閫夋嫨銆愮矘璐淬戯紝鎶婂垰鎵嶅鍒剁殑16杩涘埗鍐呭绮樿创鍒版柊鏂囦欢涓7銆佺劧鍚庨渶瑕佸啀鐐瑰嚮杩涘叆鍒楁ā寮忥紝鍦ㄥ垪妯″紡涓氨鍙互鏂逛究鐨勬妸涓棿鐨16杩涘埗閮ㄥ垎鍐呭鍗曠嫭杞崲鎴愬瓧绗浜嗐
  • 16杩涘埗杞崲鎴愬瓧绗﹀伐鍏銆鎴栬呮槸鏂规硶銆傝兘鐢ㄥ嵆閲囩撼銆
    绛旓細itoa(i,temp,10);///灏唅杞崲涓哄瓧绗涓叉斁鍏emp涓,鏈鍚庝竴涓暟瀛楄〃绀哄崄杩涘埗 itoa(i,temp,2); ///鎸変簩杩涘埗鏂瑰紡杞崲 闀挎暣鍨(long) ltoa(l,temp,10); 娴偣鏁(float,double) 鐢╢cvt鍙互瀹屾垚杞崲,杩欐槸MSDN涓殑渚嬪瓙: int decimal, sign; char *buffer; double source = 3.1415926535; buffer = ...
  • 濡備綍鎶16杩涘埗鐨勬暟鎹杞崲鎴愬瓧绗涓
    绛旓細涓昏鏈変袱涓柟娉曪紝鍏跺疄閮芥槸瀵圭幇鏈夊嚱鏁扮殑浣跨敤锛氭柟娉1: sscanf()鍑芥暟鍚: sscanf鍔 鑳: 浠瀛楃涓鏍煎紡鍖栬緭鍏ョ敤 娉: int sscanf(char *string, char *format[,argument,...]);浠ヤ笂鐨 format 涓 %x 灏辨槸灏嗗瓧绗︿覆鏍煎紡鍖栦负 16 杩涘埗鏁颁緥瀛愶細#include <stdio.h>void main(){char* p = "0x1a";i...
  • 鍗佸叚杩涘埗鏁拌浆瀛楃
    绛旓細16杩涘埗杞崲鎴愬瓧绗涓诧細String b = String.Parse("AB", System.Globalization.NumberStyles.HexNumber)
  • 16杩涘埗濡備綍杞崲鎴姹夊瓧,鏈変粈涔宸ュ叿鍚?
    绛旓細鍗佸叚杩涘埗鍜屾眽瀛椾箣闂翠笉瀛樺湪杞崲鍏崇郴銆傛眽瀛楀湪璁$畻鏈哄唴閮ㄥ瓨鍌ㄧ敤16浣嶄簩杩涘埗鏁版潵瀛樺偍锛屼负浜嗕功鍐欐柟渚匡紝灏16浣嶄簩杩涘埗鏁颁竴鑸啓鍑哄崄鍏繘鍒剁殑褰㈠紡锛屽氨鏄4浣嶅崄鍏繘鍒舵暟锛屾寜鐓у浗鏍囩爜鍜屾眽瀛楁満鍐呯爜鐨勮浆鎹㈡柟娉曪紝姹夊瓧瀛樺偍鏃讹紝姣忎釜瀛楄妭鐨勬渶楂樹綅鍧囦负1锛屼篃灏辨槸1***1***鐨勫舰寮忥紝杞崲鎴愬崄鍏繘鍒跺悗锛屾眽瀛楃殑鍥涗綅鍗佸叚杩涘埗鐨勭...
  • 16杩涘埗杞崲鎴ascii_16杩涘埗杞琣scii鐮杞崲宸ュ叿_16杩涘埗杞琣scii
    绛旓細16杩涘埗杞琣scii鐮杞崲宸ュ叿 //瀛楃涓茶浆鎹㈡垚16杩涘埗 function strToHex($string){ hex=""for ($i=0;$i<strlen($string);$i)hex.=dechex(ord($string[$i]));hex=strtoupper($hex);return $hex;} //16杩涘埗杞崲鎴愬瓧绗涓 function hexToStr($hex){ string=""for ($i=0;...
  • 鎬庢牱灏鍗佸叚杩涘埗鎴浜杩涘埗杞崲涓甯哥敤瀛楃
    绛旓細瑕佷粠鍚庡線鍓杞崲,涓涓鍗佸叚杩涘埗锛071E0F3C3AE3059286B0D3B677256960 鍏堝垎绂绘垚:07 1E 0F 3C 3A E3 05 92 86 B0 D3 B6 77 25 69 60 姣忎袱浣嶆暟鏄竴涓瀛楃.鍦ㄦ渶鍚庡姞涓'\0'
  • 鎬庝箞鎶婁竴涓16杩涘埗byte杞崲鎴愬瓧绗涓
    绛旓細杩樻槸灏瀛楃涓茶浆鎴鏁村舰锛屽啀鏀惧埌涓涓猙yte閲岄潰 閭e氨杩欐牱锛歜yte b = Convert.ToByte(s, 16);"闂琛ュ厖锛氭垜瑕佺殑鏄痓yte b=0x41,0x寮鍏崇殑灏辨槸16杩涘埗 锛屼竴妤肩殑鏂规硶鎶婂畠鍙樻垚65浜嗭紝鎴戣鐨勬槸0x41!"浣犺繖涓槸浠涔堟剰鎬濆晩锛宐yte鏄竴涓瓧鑺傦紝0x41鐨勫兼湰鏉ュ氨鏄65鍟婏紝淇濆瓨鍦ㄥ唴瀛樹腑涔熸槸浠65鐨勭殑浜岃繘鍒01000001...
  • 濡備綍灏16杩涘埗鏁板瓧杞崲鎴愬瓧绗涓 java
    绛旓細浣跨敤杩欎釜鏂规硶鍙互浼犺繘鍘荤殑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(...
  • 濡備綍灏16杩涘埗杩涘埗鏁杞崲鎴 瀛楃涓插舰寮 c++璇█
    绛旓細鐢╯printf鍑芥暟锛屽寘鍚湪stdio.h澶存枃浠朵腑锛岀敤娉曞涓嬶細char szStr[9];sprintf(szStr, "%x%x%x", 0x14, 0xd4, 0xcb, 0xa7);printf("%s\n", szStr);
  • 扩展阅读:中文转16进制在线工具 ... 字符转16进制 对照表 ... 十六进制在线转换器 ... 汉字编码在线转换器 ... 字符转16进制在线工具 ... 16进制转float计算器 ... 汉字转换16进制工具 ... 10进制转16计算器 ... 16进制对照表 字母 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网