关于数字字母转换为ASCII码并进行截取 要进行数据压缩,数据中含有大量10进制数字 想把其中的数字转换为ASCII码 因为数字的ASCII码的高四位是相同的,所以要将其去截掉,留下低四位。所以问题是数字转换为ASCII码,截掉高四位,留下低四位。 请大侠帮忙,最好举个例子。不胜感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 short i = 1000;i &= 0xFF; // 留下低四位 看不大明白啊 short 不是两个字节吗 每个数字是1字节也就是8位二进制码 比如说我要把数字8转化位ASCII码并保留其低四位得二进制码 ,用你的方法该怎么写啊 char x = 3;x&=0xf;低四位 为什么我用这种方法截完以后再写入txt文档 大小和以前基本一样呢 while (fileREAD.ReadString(FileString)!=FALSE) { if (FileString.Left(1)=="$")//为帧头 { int n=FileString.GetLength(); int m=0; CString strr="",cha=""; while(m<=n) { cha=FileString.Mid(m,1); char x; x&=0xff; strr=strr+x; m++; } int p=strr.GetLength(); m_file.Write(strr,p); } } 麻烦再帮我看看啊 比原来文件稍微小了一点点 while (fileREAD.ReadString(FileString)!=FALSE) { if (FileString.Left(1)=="$") { int n=FileString.GetLength(); int m=0; CString strr="",cha="";//cha是逐个读出得字符 while(m<=n) { cha=FileString.Mid(m,1); char *x=cha.GetBuffer(1);//这个地方将CString转化为char必须是char* 这样的话怎么截取啊!!!!!!!!!!! x&=0xff; strr=strr+x; m++; } int p=strr.GetLength(); m_file.Write(strr,p); } }如果用二进制该怎么写啊 好像用二进制解压的时候就比较麻烦一点了 如果不行的话大家帮我看看怎样把相邻的两个数字的ASCII码分别截得低四位后合成一个字节!大家费心帮帮我 谢谢了 这个也叫压缩么?如果是数字,每个位都有用的,不可能丢掉4位;如果是字符,把数字字符串当作数值不是更简单,比如“1234”是4个字符(ASCII码4个字节,UNICODE码8个字节),但是用short保存1234就是2个字节。楼主先把你的目的说明白。 1234四个字符 它们的ASCII码分别是00110001 00110010 00110011 00110100它们的高四位是相同的 所以去掉 把相邻的1和2的低四位组合到一起就是00010010 3和4的低四位组合到一起就是00110100 是这个意思 算法很简单的,就是移位和与或运算:#define MAKEaBYTE(low, high) (BYTE)(((BYTE)(low) & 0x0F) | ((BYTE)(high) << 4))不过这样要求你的数据只能是数字,并且是固定10进制位数,否则还真不知道如何还原。其实这么做真的没有意义,即使从压缩角度考虑,比如100,你需要1个半字节;但是用数值只有一个字节,当然也是考虑特定环境(数值小于256)。 LZ说的是压缩的BCD码吧?不过只能是数字,不能有字母。char string[] = "1234"BYTE data[2];for (int i=0; i<sizeof(str)/2; i++) data[i] = (str[i*2]&0xf) + (str[i*2+1]&0xf)*0x10; 为什么我用vs2005编译出来的静态库非常大,十多M,而且release比debug版还要大的多,二十多M?? windows编程和JAVA编程哪个更该先学? 二次开发的困惑 使用sp_OACreate,sp_OAMethod等函数的DLL应如何编写??? 关于调用api操作注册表的问题 对话框的UpdateData好像失灵了 串口接收数据的问题,极难..... 编译通过,怎么无法链接啊? 显示Unicode字符的问题 大家一定要帮个忙,突然间**QQ在2000**不能用,(和2000本身有关)------------错误如下: 同时访问资源 串口读不到数据的奇怪现象
i &= 0xFF; // 留下低四位
x&=0xf;低四位
while (fileREAD.ReadString(FileString)!=FALSE)
{
if (FileString.Left(1)=="$")//为帧头
{
int n=FileString.GetLength();
int m=0;
CString strr="",cha="";
while(m<=n)
{
cha=FileString.Mid(m,1);
char x;
x&=0xff;
strr=strr+x;
m++;
}
int p=strr.GetLength();
m_file.Write(strr,p);
}
}
麻烦再帮我看看啊
while (fileREAD.ReadString(FileString)!=FALSE)
{
if (FileString.Left(1)=="$")
{
int n=FileString.GetLength();
int m=0;
CString strr="",cha="";//cha是逐个读出得字符
while(m<=n)
{
cha=FileString.Mid(m,1);
char *x=cha.GetBuffer(1);
//这个地方将CString转化为char必须是char* 这样的话怎么截取啊!!!!!!!!!!!
x&=0xff;
strr=strr+x;
m++;
}
int p=strr.GetLength();
m_file.Write(strr,p);
}
}
如果用二进制该怎么写啊 好像用二进制解压的时候就比较麻烦一点了
#define MAKEaBYTE(low, high) (BYTE)(((BYTE)(low) & 0x0F) | ((BYTE)(high) << 4))
不过这样要求你的数据只能是数字,并且是固定10进制位数,否则还真不知道如何还原。其实这么做真的没有意义,即使从压缩角度考虑,比如100,你需要1个半字节;但是用数值只有一个字节,当然也是考虑特定环境(数值小于256)。
char string[] = "1234"
BYTE data[2];
for (int i=0; i<sizeof(str)/2; i++)
data[i] = (str[i*2]&0xf) + (str[i*2+1]&0xf)*0x10;