20 个解决方案
#1
/**
将数据按高字节到低字节的顺序转换成ASCII.
@param[out] pOutBuffer 转换结果存储位置.
@param[in] pData 要转换的数据.
@param[in] nOutBytes 转换结果字节数.
@return 实际转换的字节数,和\a nOutBytes 相等.
*/
int CDeviceDriver::HexToAscii(char* pOutBuffer, const void* pData, int nOutBytes)
{
int nConverted = 0;
BYTE* p = (BYTE*)pData+nOutBytes/2-1;
int c;
if ((nOutBytes % 2) == 1)
{
c = p[1] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
nConverted++;
}
for(nOutBytes/=2; nOutBytes>0; nOutBytes--, p--, nConverted+=2)
{
c = (p[0] >> 4) & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
c = p[0] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
}
return nConverted;
}
将数据按高字节到低字节的顺序转换成ASCII.
@param[out] pOutBuffer 转换结果存储位置.
@param[in] pData 要转换的数据.
@param[in] nOutBytes 转换结果字节数.
@return 实际转换的字节数,和\a nOutBytes 相等.
*/
int CDeviceDriver::HexToAscii(char* pOutBuffer, const void* pData, int nOutBytes)
{
int nConverted = 0;
BYTE* p = (BYTE*)pData+nOutBytes/2-1;
int c;
if ((nOutBytes % 2) == 1)
{
c = p[1] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
nConverted++;
}
for(nOutBytes/=2; nOutBytes>0; nOutBytes--, p--, nConverted+=2)
{
c = (p[0] >> 4) & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
c = p[0] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
}
return nConverted;
}
#2
HexToAscii(char* x)//x="41"
{
print *x*16+*(x+1);
}
{
print *x*16+*(x+1);
}
#3
如果字符串前面有 0x的话,字符串向后移下
上面的写错了,是print (*x-'0')*16+(*(x+1)-'0');
上面的写错了,是print (*x-'0')*16+(*(x+1)-'0');
#4
你上面的转换不是十六进制转换为ASCII码 吧 Troj4n 我输入31 转换成49 了
#5
31(16进制)难道不等于 49(十进制)?
#6
我想转换成 ACSII 码 hex 31 转换成 1
#7
你看看你那可以吗
#8
ASCII本来就是0x7F范围里面的16进制啊,楼主想怎样?
char a=0x31;
CString str;
str.format("%c",a);
MessageBox(str);
这个算不算?
char a=0x31;
CString str;
str.format("%c",a);
MessageBox(str);
这个算不算?
#9
我现在就是想 比如我的16进制的值是31,我需要把它转换成ASCII 的值为 1. 就这样
#10
print (*x-'0')*16+(*(x+1)-'0')-30;
这样就行了
这样就行了
#11
上面写的30是16进制
按你的要求就这样吧 print (*x-'0')*16+(*(x+1)-'0')-0x30;或
print (*x-'0')*16+(*(x+1)-'0')-48;
按你的要求就这样吧 print (*x-'0')*16+(*(x+1)-'0')-0x30;或
print (*x-'0')*16+(*(x+1)-'0')-48;
#12
非常感谢 大家
#13
const char *Hex2ASC(const BYTE *Hex, int Len)
{
static char ASC[100 * 2];
int i;
const char HEX_CODE[] = "0123456789ABCDEF";
for (i = 0; i < Len; i++)
{
ASC[i * 2] = HEX_CODE[Hex[i] >> 4];
ASC[i * 2 + 1] = HEX_CODE[Hex[i] & 0x0F];
}
ASC[i * 2] = '\0';
return ASC;
}
呵呵,30分也叫高分......
{
static char ASC[100 * 2];
int i;
const char HEX_CODE[] = "0123456789ABCDEF";
for (i = 0; i < Len; i++)
{
ASC[i * 2] = HEX_CODE[Hex[i] >> 4];
ASC[i * 2 + 1] = HEX_CODE[Hex[i] & 0x0F];
}
ASC[i * 2] = '\0';
return ASC;
}
呵呵,30分也叫高分......
#14
如果你的答案可以,那我就给你加分了啊 .呵呵
#15
int String2Bytes( const unsigned char* pSrc, char* pDst, int nSrcLength )
{
for (int i = 0; i<(nSrcLength /2); i++)
{
pDst[i] = Tansfer(pSrc[2*i]) *16 + Tansfer(pSrc[2*i + 1]);
}
return nSrcLength/2;
}
char Tansfer( char c )
{
if (c > 47 && c < 58 )
{
c = c - 48;
}
else if ( c > 64 && c < 71)
{
c = c - 55;
}
else if (c > 96 && c < 103)
{
c-= 87;
}
return c;
}
#16
bragi523 你这是转换的也是 16进制转换成ACSII吗
#17
看了半天也没看明白你想干什么,难道不是把数据转成十六制字符串输出吗?还是十六进制字符串转换成数据?
#18
呵呵 ,是把十六进制的字符串,转换成ACSII码 了 ,比如 十六进制的数是 31 转换成ACSII 码 就是1
现在我正在做串口了,需要数据转换了
现在我正在做串口了,需要数据转换了
#19
还是糊涂啊,按我的理解,你的意思好象是把ASCII字符'1'转成整数1,ASCII字符'1'的十六进制表示形式为0x31,你想做的转换是把ASCII字符变成整型数据吧,是这个意思吗.
#20
借道问一个问题,那我们编程过程中,使用的整型数据是什么编码?
套在楼主的问题上就是从ASCII码转到**码(整型数据所属的编码)
套在楼主的问题上就是从ASCII码转到**码(整型数据所属的编码)
#1
/**
将数据按高字节到低字节的顺序转换成ASCII.
@param[out] pOutBuffer 转换结果存储位置.
@param[in] pData 要转换的数据.
@param[in] nOutBytes 转换结果字节数.
@return 实际转换的字节数,和\a nOutBytes 相等.
*/
int CDeviceDriver::HexToAscii(char* pOutBuffer, const void* pData, int nOutBytes)
{
int nConverted = 0;
BYTE* p = (BYTE*)pData+nOutBytes/2-1;
int c;
if ((nOutBytes % 2) == 1)
{
c = p[1] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
nConverted++;
}
for(nOutBytes/=2; nOutBytes>0; nOutBytes--, p--, nConverted+=2)
{
c = (p[0] >> 4) & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
c = p[0] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
}
return nConverted;
}
将数据按高字节到低字节的顺序转换成ASCII.
@param[out] pOutBuffer 转换结果存储位置.
@param[in] pData 要转换的数据.
@param[in] nOutBytes 转换结果字节数.
@return 实际转换的字节数,和\a nOutBytes 相等.
*/
int CDeviceDriver::HexToAscii(char* pOutBuffer, const void* pData, int nOutBytes)
{
int nConverted = 0;
BYTE* p = (BYTE*)pData+nOutBytes/2-1;
int c;
if ((nOutBytes % 2) == 1)
{
c = p[1] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
nConverted++;
}
for(nOutBytes/=2; nOutBytes>0; nOutBytes--, p--, nConverted+=2)
{
c = (p[0] >> 4) & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
c = p[0] & 0xF;
*pOutBuffer++ = (c < 10) ? (c+'0') : (c-0xA+'A');
}
return nConverted;
}
#2
HexToAscii(char* x)//x="41"
{
print *x*16+*(x+1);
}
{
print *x*16+*(x+1);
}
#3
如果字符串前面有 0x的话,字符串向后移下
上面的写错了,是print (*x-'0')*16+(*(x+1)-'0');
上面的写错了,是print (*x-'0')*16+(*(x+1)-'0');
#4
你上面的转换不是十六进制转换为ASCII码 吧 Troj4n 我输入31 转换成49 了
#5
31(16进制)难道不等于 49(十进制)?
#6
我想转换成 ACSII 码 hex 31 转换成 1
#7
你看看你那可以吗
#8
ASCII本来就是0x7F范围里面的16进制啊,楼主想怎样?
char a=0x31;
CString str;
str.format("%c",a);
MessageBox(str);
这个算不算?
char a=0x31;
CString str;
str.format("%c",a);
MessageBox(str);
这个算不算?
#9
我现在就是想 比如我的16进制的值是31,我需要把它转换成ASCII 的值为 1. 就这样
#10
print (*x-'0')*16+(*(x+1)-'0')-30;
这样就行了
这样就行了
#11
上面写的30是16进制
按你的要求就这样吧 print (*x-'0')*16+(*(x+1)-'0')-0x30;或
print (*x-'0')*16+(*(x+1)-'0')-48;
按你的要求就这样吧 print (*x-'0')*16+(*(x+1)-'0')-0x30;或
print (*x-'0')*16+(*(x+1)-'0')-48;
#12
非常感谢 大家
#13
const char *Hex2ASC(const BYTE *Hex, int Len)
{
static char ASC[100 * 2];
int i;
const char HEX_CODE[] = "0123456789ABCDEF";
for (i = 0; i < Len; i++)
{
ASC[i * 2] = HEX_CODE[Hex[i] >> 4];
ASC[i * 2 + 1] = HEX_CODE[Hex[i] & 0x0F];
}
ASC[i * 2] = '\0';
return ASC;
}
呵呵,30分也叫高分......
{
static char ASC[100 * 2];
int i;
const char HEX_CODE[] = "0123456789ABCDEF";
for (i = 0; i < Len; i++)
{
ASC[i * 2] = HEX_CODE[Hex[i] >> 4];
ASC[i * 2 + 1] = HEX_CODE[Hex[i] & 0x0F];
}
ASC[i * 2] = '\0';
return ASC;
}
呵呵,30分也叫高分......
#14
如果你的答案可以,那我就给你加分了啊 .呵呵
#15
int String2Bytes( const unsigned char* pSrc, char* pDst, int nSrcLength )
{
for (int i = 0; i<(nSrcLength /2); i++)
{
pDst[i] = Tansfer(pSrc[2*i]) *16 + Tansfer(pSrc[2*i + 1]);
}
return nSrcLength/2;
}
char Tansfer( char c )
{
if (c > 47 && c < 58 )
{
c = c - 48;
}
else if ( c > 64 && c < 71)
{
c = c - 55;
}
else if (c > 96 && c < 103)
{
c-= 87;
}
return c;
}
#16
bragi523 你这是转换的也是 16进制转换成ACSII吗
#17
看了半天也没看明白你想干什么,难道不是把数据转成十六制字符串输出吗?还是十六进制字符串转换成数据?
#18
呵呵 ,是把十六进制的字符串,转换成ACSII码 了 ,比如 十六进制的数是 31 转换成ACSII 码 就是1
现在我正在做串口了,需要数据转换了
现在我正在做串口了,需要数据转换了
#19
还是糊涂啊,按我的理解,你的意思好象是把ASCII字符'1'转成整数1,ASCII字符'1'的十六进制表示形式为0x31,你想做的转换是把ASCII字符变成整型数据吧,是这个意思吗.
#20
借道问一个问题,那我们编程过程中,使用的整型数据是什么编码?
套在楼主的问题上就是从ASCII码转到**码(整型数据所属的编码)
套在楼主的问题上就是从ASCII码转到**码(整型数据所属的编码)