VB中十六进制如何获取它转为二进制后数据的第I位的值?
VB中十六进制如何获取它转为二进制后数据的第I位?例如:S=&H1A3CDE(仅是一个例子,数据很多):换成二进制为:110100011110011011110问题一:如...
VB中十六进制如何获取它转为二进制后数据的第I位?例如:
S=&H1A3CDE(仅是一个例子,数据很多):
换成二进制为:110100011110011011110
问题一:如果我要读取的第I位是0还是1(例如W(S,5)=1 W(S,1)=0),怎样才能办到(即这个函数怎么写W(S,I))=??
问题二:如果我要读取第I到J位是多少呢(例如5到6位Z(S,5,6)=01,那么怎么写函数Z(S,I,J)=?)?
问题三:在问题二的基础Z(S,I,J)上,读取的数据转为十进制例如X(S,1,3)=6,那么X(S,I,J)=?
要求:
1. S不一定是那个数值的,任一十六(四至六位的十六进制数)进制的数都要行得通,如果就一个数据,我会弄。
2.越简单明了越好,问题共三个,尤其是第二个。
3.分数我有的是,回答好的话我会给另外分的。
4.先谢谢你八辈子祖宗了。
二楼的那位,如果按照你说那样,十六进制转二进制的代码很长的。因为我的数据s本来就是一个数组。如果数组中每条数据还要转换成为二进制在去读取二进制里面数据的话,我会。但是那样就相当庞大数组里面还有庞大的数组,运算就相当的慢了。我是想要一个比较简单的直接就可以读取S每个数据的第几位的函数,是运算速度上的问题。而且是vb的,当然还是谢谢你的回答了。
通过分析我能想到的最快的函数还是这个(见下,与你的2差不多)还是比较慢:
w(s,i)为:
z="&H"&hex(2^i)
w(S,i)= abs(cint(S)) and z
但是不管是你的方法还是我的方法,十六进制达到一定程度就变为负数了。怎么解决呢? 展开
S=&H1A3CDE(仅是一个例子,数据很多):
换成二进制为:110100011110011011110
问题一:如果我要读取的第I位是0还是1(例如W(S,5)=1 W(S,1)=0),怎样才能办到(即这个函数怎么写W(S,I))=??
问题二:如果我要读取第I到J位是多少呢(例如5到6位Z(S,5,6)=01,那么怎么写函数Z(S,I,J)=?)?
问题三:在问题二的基础Z(S,I,J)上,读取的数据转为十进制例如X(S,1,3)=6,那么X(S,I,J)=?
要求:
1. S不一定是那个数值的,任一十六(四至六位的十六进制数)进制的数都要行得通,如果就一个数据,我会弄。
2.越简单明了越好,问题共三个,尤其是第二个。
3.分数我有的是,回答好的话我会给另外分的。
4.先谢谢你八辈子祖宗了。
二楼的那位,如果按照你说那样,十六进制转二进制的代码很长的。因为我的数据s本来就是一个数组。如果数组中每条数据还要转换成为二进制在去读取二进制里面数据的话,我会。但是那样就相当庞大数组里面还有庞大的数组,运算就相当的慢了。我是想要一个比较简单的直接就可以读取S每个数据的第几位的函数,是运算速度上的问题。而且是vb的,当然还是谢谢你的回答了。
通过分析我能想到的最快的函数还是这个(见下,与你的2差不多)还是比较慢:
w(s,i)为:
z="&H"&hex(2^i)
w(S,i)= abs(cint(S)) and z
但是不管是你的方法还是我的方法,十六进制达到一定程度就变为负数了。怎么解决呢? 展开
2个回答
展开全部
为了表示对你的尊重,我就先不写代码了.
主要有3种思路
1、通用的,把16进制字符串转换成对应的进制表示(譬如先用val()转成整形,然后再换进制,换进制的算法你会吧?),然后用mid截取需要的段。
2、只适用于问题1。直接用iif(val(s) and 2^(i-1),1,0)
3、适用于2与16进制之间的转换:记住4位2进制数对应1位16进制数,具体算法自己想咯
==================================
1、er...首先请教hen是有什么功能的函数?
2、关于负数:当最高位(bit)为1时,用10进制表示就是负数.你可以注意不要让最高位为1,或者用long型,或者用currency,或者自己写一个类。
3、速度的话我觉得不会太慢吧,就算你有10m的数据也至多不过几秒?未必要另外建立一个数组,这要看你的需求。非要用数组的话,注意不要用redim。你想要速度的话,可以用第2种方法。或者改一下,由于4位2进制对1位16进制,只要抽出16进制中需要判断的那一位加以处理就好了。更发烧一点的话,不要用val,自己写一个有针对性的;iif也不要用,用if代替;乘方什么的都用加减代替;实在不够快写汇编。
主要有3种思路
1、通用的,把16进制字符串转换成对应的进制表示(譬如先用val()转成整形,然后再换进制,换进制的算法你会吧?),然后用mid截取需要的段。
2、只适用于问题1。直接用iif(val(s) and 2^(i-1),1,0)
3、适用于2与16进制之间的转换:记住4位2进制数对应1位16进制数,具体算法自己想咯
==================================
1、er...首先请教hen是有什么功能的函数?
2、关于负数:当最高位(bit)为1时,用10进制表示就是负数.你可以注意不要让最高位为1,或者用long型,或者用currency,或者自己写一个类。
3、速度的话我觉得不会太慢吧,就算你有10m的数据也至多不过几秒?未必要另外建立一个数组,这要看你的需求。非要用数组的话,注意不要用redim。你想要速度的话,可以用第2种方法。或者改一下,由于4位2进制对1位16进制,只要抽出16进制中需要判断的那一位加以处理就好了。更发烧一点的话,不要用val,自己写一个有针对性的;iif也不要用,用if代替;乘方什么的都用加减代替;实在不够快写汇编。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询