技术论坛

如果在VBS里面把整形值的某一位转换成布尔类型数据

作者 主题
侠客

经验值: 935
发帖数: 295
精华帖: 0
主题:【求助】如果在VBS里面把整形值的某一位转换成布尔类型数据
推荐帖


只看楼主 只看精华 楼主 2020-07-07 13:52:55

如题,想在WINCC里面的VBS里实现,该怎样编写脚本?


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1631043&b_id=5&s_id=0&num=12

侠圣

经验值: 3015
发帖数: 363
精华帖: 4
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 1楼 2020-07-07 14:57:16

'整数拆分成两个字节

byte[1] = int / 256

byte[0] = int mod 256

‘将低字节拆分成低八位

b = byte[0]

for i = 0 to 7

bit[i] = b mod 2

b = b / 2

next

’将高字节拆分成高八位

b = byte[1]

for i = 8 to 15

bit[i] = b mod 2

b = b / 2

next



 
以下网友喜欢您的帖子:

  
侠客

经验值: 935
发帖数: 295
精华帖: 0
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据
推荐帖


只看楼主 只看精华 楼主 2楼 2020-07-07 22:08:17

谢谢指导,有点不太明白为啥要拆成2个字?我试着直接读第2位和第14位,按上面方法直接按字的形式运算,也是能正确显示的。另外/应该是\


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3015
发帖数: 363
精华帖: 4
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据
推荐帖


只看楼主 只看精华 3楼 2020-07-09 15:32:19
以下是引用truezhang在2020-07-07 22:08:17的发言 >2楼

谢谢指导,有点不太明白为啥要拆成2个字?我试着直接读第2位和第14位,按上面方法直接按字的形式运算,也是能正确显示的。另外/应该是\

习惯性拆分为字节再拆分为位!

/和\记不住,一个会返回小数,一个只返回整数!



 
以下网友喜欢您的帖子:

  
至圣

经验值: 16723
发帖数: 1309
精华帖: 2
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 4楼 2020-07-09 17:58:42
以下是引用CZ2020在2020-07-07 14:57:16的发言 >1楼

'整数拆分成两个字节

byte[1] = int / 256

byte[0] = int mod 256

‘将低字节拆分成低八位

b = byte[0]

for i = 0 to 7

bit[i] = b mod 2

b = b / 2

next

’将高字节拆分成高八位

b = byte[1]

for i = 8 to 15

bit[i] = b mod 2

b = b / 2

next


试试看
|谢谢


同一个问题ID下,已经先回答此问题的人,如再参考我答案而修改自己答案的,就是王八蛋!
以下网友喜欢您的帖子:

  
游民

经验值: 120
发帖数: 2
精华帖: 0
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 5楼 2020-07-10 15:06:26

 连续除2取余,就能分别得到各个位了,这个可以参照考虑2进制与10进制的转换


我们历尽千辛,不过为成为心中少年
以下网友喜欢您的帖子:

  
奇侠

经验值: 8096
发帖数: 1308
精华帖: 6
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 6楼 2020-07-11 08:46:05
以下是引用CZ2020在2020-07-07 14:57:16的发言 >1楼

'整数拆分成两个字节

byte[1] = int / 256

byte[0] = int mod 256

‘将低字节拆分成低八位

b = byte[0]

for i = 0 to 7

bit[i] = b mod 2

b = b / 2

next

’将高字节拆分成高八位

b = byte[1]

for i = 8 to 15

bit[i] = b mod 2

b = b / 2

next


byte[1] = int / 256

byte[0] = int mod 256

  这个除256(高字节)   跟求余数(低字节)怎么个解释法???难道是一个字节0-255先算低8位?  用这个数除255才对吧?怎么会是除256呢?假如这个数是257 用你这种方法也行不通啊,,除不尽如果强制类型转换也会丢失数据啊,我还是不同意你这种思路,,,能否解释一下?我觉得可以用for循环与逻辑每个位逐次与逻辑,,只要与的结果大于1就  输出就行了。。


养活一团春意思,撑起两根穷骨头
以下网友喜欢您的帖子:

  
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 7楼 2020-07-11 08:49:19
以下是引用CZ2020在2020-07-07 14:57:16的发言 >1楼

'整数拆分成两个字节

byte[1] = int / 256

byte[0] = int mod 256

‘将低字节拆分成低八位

b = byte[0]

for i = 0 to 7

bit[i] = b mod 2

b = b / 2

next

’将高字节拆分成高八位

b = byte[1]

for i = 8 to 15

bit[i] = b mod 2

b = b / 2

next


不错 正解。


邮箱 yongquancun@126.com
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 8楼 2020-07-11 12:07:23
1左移n位和整数做与操作,大于0就是1,否则为0
 
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 9楼 2020-07-12 09:41:02

vbs里面没有布尔型的数据类型。

如果要判断数值某个二进制位用And运算。

比如判断 bit0 就用

dim bool

if Value And 1 then

   bool = 1

else

    bool = 0

end if


反正bit0 就And 1,bit1 用 And 2,bit3 用 And4.....

反正就是And 位对应的二进制2^n值,16位数每个位值的0位到15位分别是:1、2、4、8、16、32、64、128、256、512.....32768。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 28599
发帖数: 10824
精华帖: 131
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 10楼 2020-07-12 22:15:33

楼上纠结256和255的有点糊涂了。 


256没错的


256在16进制即100

相当于一个32位的数值,去掉2个0, 这怎么会冒出来255呢?



微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
奇侠

经验值: 6606
发帖数: 393
精华帖: 2
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据
精华帖精华帖星级3级


只看楼主 只看精华 11楼 2020-07-22 11:01:46

来个简单的

bit0=SmartTags("内容") And 2^0

bit1=SmartTags("内容") And 2^1

bit2=SmartTags("内容") And 2^2

bit3=SmartTags("内容") And 2^3

bit4=SmartTags("内容") And 2^4




 
精华帖版主置评: 赞赞
以下网友喜欢您的帖子:

  
侠士

经验值: 1751
发帖数: 379
精华帖: 0
回复:如果在VBS里面把整形值的某一位转换成布尔类型数据


只看楼主 只看精华 12楼 2020-07-24 16:54:47

可以直接读那位个变量的你需要的位数


路漫漫其修远
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
如果在VBS里面把整形值的某一位转换成布尔类型数据
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。