请问如何将AnsiString类型转成二进制?我想从进制中取部分,如:110001 我只想要第一个0,我该怎么得到?谢谢!!!

musickiller 2003-08-26 09:39:42
如题!谢谢!!!
...全文
85 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
musickiller 2003-08-28
  • 打赏
  • 举报
回复
for (int j=1; j<6; j++)的意思是:要取5次,因为取的次数不一样,有的要取6次,有的却要取3次,而且每次取的位置不一样,,case 中j 只用到2是因为太多了,我就只贴上取2次的代码
musickiller 2003-08-28
  • 打赏
  • 举报
回复
程序是这样的,用户输入4位16进制的数,我要把这个16进制数转换成2进制,从中取出几位,再根据这几位来判断状态。比如用户输入:1045 2进制 0001000001000101 取出10-12位 即三位,就有8种可能性 000 001 010 011 100 101 110 111,现在是100 那就执行 case 100的功能,不知道我说的清不清楚?
柯本 2003-08-28
  • 打赏
  • 举报
回复
(( x & 0x1c00))>>10 一句中的 >>10 的 >>10 表示右移10位
musickiller 2003-08-28
  • 打赏
  • 举报
回复
keiy() (( x & 0x1c00))>>10 一句中的 >>10 看不懂
firestars 2003-08-28
  • 打赏
  • 举报
回复
注意hextobin函数并不能够产生二进制的字符串。
如下:例如:0x1231
返回的那个字符串数组中,第一位是代表了12,第二位代表了31,以此类推。
firestars 2003-08-28
  • 打赏
  • 举报
回复
自己写一个类来实现吧。我写了一个:
#include "system.hpp"
#include "dialogs.hpp"
class MyHexToBin
{
private :
AnsiString astrHex;
AnsiString astrOut;
char *p;
int buffersize;
int justify[8];
public:
MyHexToBin()
{
//justify={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
justify[7]=0x01;
justify[6]=0x02;
justify[5]=0x04;
justify[4]=0x08;
justify[3]=0x10;
justify[2]=0x20;
justify[1]=0x40;
justify[0]=0x80;

}
AnsiString get_out(AnsiString astrHex)
{

int orLength;
orLength=astrHex.Length();
if (orLength>2)
{
if (astrHex[1]=='0' && (astrHex[2]=='x' || astrHex[2]=='X'))
{
astrHex.Delete(1,2);
orLength=astrHex.Length();
}
}

for (int i=1;i<astrHex.Length();i++)
{
char a=astrHex[i];
if (!(('f'>=a && a>='a')||('F'>=a && a>='A')||('9'>=a && a>='0')) )
{
ShowMessage("错误的16进制表达式");
return NULL;
}
}

if (orLength %2 )
{
buffersize=orLength/2+1;
astrHex.Insert("0",astrHex.Length()+1);
}
else
buffersize=orLength/2;

p=new char[buffersize];

HexToBin(astrHex.c_str(),p,buffersize);

// if ((buffersize mod 2)==0)
int temp;
temp=orLength%2 ;

if (temp==0)
for (int i=0;i<buffersize;i++)
{
for (int j=0;j<8;j++)
{
if (p[i]&justify[j])
astrOut.Insert(AnsiString("1"),astrOut.Length()+1);
else
astrOut.Insert(AnsiString("0"),astrOut.Length()+1);
}
}
else
{
for (int i=0;i<buffersize-1;i++)
{
for (int j=0;j<8;j++)
{
if (p[i]&justify[j])
astrOut.Insert(AnsiString("1"),astrOut.Length()+1);
else
astrOut.Insert(AnsiString("0"),astrOut.Length()+1);
}
}
for (int j=0;j<4;j++)
{
if (p[buffersize-1]&justify[j])
astrOut.Insert(AnsiString("1"),astrOut.Length()+1);
else
astrOut.Insert(AnsiString("0"),astrOut.Length()+1);

}
}
return astrOut;

}
~MyHexToBin()
{
delete []p;
}
};

例子: MyHexToBin hehe;
Edit1->Text=hehe.get_out("0x1fff");

就可以得到0001111111111111了。
当中字母大小写都可以,前面的0x也可以不要。得到了字符串,什么事情都好做了
柯本 2003-08-28
  • 打赏
  • 举报
回复
1 不要在KeyPress中做,可在Edit的OnExit中做
2 int x=StrToInt("0x"+General->Text);

char *p;
int x=strtol(General->Text.c_str(),&p,16);
结果是一样的(二进制是内存中的)
3 看懂下面的程序
//取10-12位,10-12位又有8种情况
switch (( x & 0x1c00))>>10 //这里就是取10-12位
{
case 000 :{}; break; // 这里就是10-12位为000
case 0x1 :{}; break; // 这里就是10-12位为001
case 0x2 :{}; break; // 这里就是10-12位为010
case 0x3 :{}; break; // 这里就是10-12位为011
case 0x4 :{}; break; // 这里就是10-12位为100
case 0x5 :{}; break; // 这里就是10-12位为101
case 0x6 :{}; break; // 这里就是10-12位为100
case 0x7 :{}; break; // 这里就是10-12位为111
default : break;
}
Cocoky 2003-08-28
  • 打赏
  • 举报
回复
顶!
柯本 2003-08-27
  • 打赏
  • 举报
回复
最近网络不正常,CSDN老上不去!!
--keiy() 用你给的最后一个方法,得到的是2进制的和,如 输入16进制数: 1234 ,得出4660--
当然应该是这个结果,0x1234的二进制为1001000110100十进制为4660
还有你的程序 for (int j=1; j<6; j++)我不明白,case 中j 只用到2
你能把要求清楚地告许我吗?
musickiller 2003-08-26
  • 打赏
  • 举报
回复
在编译的时候提示这一句中的"0x"不能转换成Int,怎么办?
int x=StrToInt("0x"+Edit1->Text);
柯本 2003-08-26
  • 打赏
  • 举报
回复
没看到上一贴
用一变量
int y=((x & 0x60)); // 取D1,D2位
swicth {
case 0x10:
...
break;
...
}
...
y=((x & 0x51)); // 取D6,D4,D0位
...
或直接用case
switch(x)
{
case 0x80: //D7=1
...
break;
case 0xa8: //D7=1,D5=1,D4=1
...
break;
}
musickiller 2003-08-26
  • 打赏
  • 举报
回复
不一定,有时截取2进制中的三位,有时又只要截取2位,最多时要截取4位呀!
柯本 2003-08-26
  • 打赏
  • 举报
回复
0xf 表示16进制的0F,二进制的1111,就是低四4位
我只是个例子,你要取出当中的一部分是第几位到第几位?
musickiller 2003-08-26
  • 打赏
  • 举报
回复
但有时截取2进制中的三位,有时又只要截取2位,最多时要截取4位呀!
musickiller 2003-08-26
  • 打赏
  • 举报
回复
请问 keiy(): switch( x & 0x0f )一句中0x0f代表什么意思?
柯本 2003-08-26
  • 打赏
  • 举报
回复
int x=StrToInt("0x"+Edit1->Text);
switch(x & 0x0f ) //取后4位
{
case 0x1:
// 处理1
break;
case 0x5:
// 处理5
break;
}
...
musickiller 2003-08-26
  • 打赏
  • 举报
回复
用HexToBin转换后 怎么截取2进制中的一部分呢?
Siney 2003-08-26
  • 打赏
  • 举报
回复
HexToBin函数可以转换16 到 2
teatool 2003-08-26
  • 打赏
  • 举报
回复
Pos
SubString
musickiller 2003-08-26
  • 打赏
  • 举报
回复
我的意思是:
我用TEdit->Text接收用户输入的16进制数,但TEdit->Text得到的数是AnsiString类型的,我要把用户输入的数转换为2进制数,怎么转?也就是说把AnsiString类型的16进制数转成2进制,转换完成后,我就从2进制中按要求取出当中的一部分,并用switch选择语句做相应的操作.
谢谢!!!!!!!谢谢!!!!!!!
加载更多回复(16)

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧