ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖

[已解决] 十进制转换为二进制

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-10 20:33 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据格式转换
本帖最后由 清泉石上流shm 于 2012-7-10 20:38 编辑
香川群子 发表于 2012-7-10 05:54
写入只能按照字节,一个字节一个字节地改。 不能按照 0 / 1 这样数位来改。

计算机不是按照1个数位单位来 ...


嗯,就是按照一个字节一个字节写入,只要写入时加以处理,将不需要变动的位依然不变,需要变动的位通过计算等方法写入!比如改变第5位,找到第一个字节二进制:00110100,现在要在第5位写入0,则写入00100100这样就达到目的了!由于不知道怎么实现所以请老师帮忙!!

TA的精华主题

TA的得分主题

发表于 2012-7-10 21:02 | 显示全部楼层
你要我帮你,难道就不需要上附件么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-10 21:22 | 显示全部楼层
香川群子 发表于 2012-7-10 21:02
你要我帮你,难道就不需要上附件么?

请看附件,{:soso_e100:}


附件.rar

7.54 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2012-7-11 16:50 | 显示全部楼层
需要改动前二进制文件的附件。
最好还有改动成功结果的附件作比较。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-11 21:03 | 显示全部楼层
香川群子 发表于 2012-7-11 16:50
需要改动前二进制文件的附件。
最好还有改动成功结果的附件作比较。

附件已经重新上传,EXCEL中有模拟需要的效果,请查看,谢谢您的帮助,您辛苦了!!

新建文件夹 (4).rar

9.1 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-13 19:32 | 显示全部楼层
香川群子 发表于 2012-7-11 16:50
需要改动前二进制文件的附件。
最好还有改动成功结果的附件作比较。

亲爱的裙子老师,附件已经上传在第15楼,里面有模拟前后的数据情况!

TA的精华主题

TA的得分主题

发表于 2012-7-13 22:51 | 显示全部楼层
本帖最后由 香川群子 于 2012-7-13 22:53 编辑

代码写好了:
  1. Function DBin(n, Optional l = 8)
  2.     If l = 0 Then
  3.         l = Len(n)
  4.         For i = 1 To l
  5.             DBin = DBin + Mid(n, i, 1) * 2 ^ (l - i)
  6.         Next
  7.     Else
  8.         Do
  9.             s = n Mod 2 & s
  10.             n = n \ 2
  11.         Loop While n
  12.         If Len(s) < l Then DBin = Right(String(l, "0") & s, l) Else DBin = s
  13.     End If
  14. End Function
  15. '首先是自定义函数的升级:默认十进制转为二进制(8位),升级为当第2参数=0时,再把二进制转换为十进制数。

  16. Sub BinReWrite() '二进制位值改写(1→0,0→1)
  17.     Dim B As Byte
  18.    
  19.     Open ThisWorkbook.Path & "\Y.dat" For Binary As #1 '打开文件
  20.    
  21.     For A = 1 To 40 '可批量循环处理,举例为处理第1-40个数位
  22.    
  23.         i = (A - 1) \ 8      '计算该数位对应的字节数序号
  24.         j = A - i * 8         '计算该数位在该字节中的位置
  25.         Get #1, i + 1, B   '从文件中获取含该数位的整个字节
  26.         t = DBin(B)         '用自定义函数转换该字节为二进制结果
  27.         
  28.         If Mid(t, j, 1) = 0 Then '检查该数位的二进制值
  29.             Mid(t, j, 1) = 1        '是0则改写转换为1
  30.         Else
  31.             Mid(t, j, 1) = 0        '是1则改写转换为0
  32.         End If
  33.         
  34.         'Mid(t, j, 1) = C           '或者如果不论该数位对应二进制结果是0还是1,一律改写为=C时,直接用这一句。
  35.       
  36.         B = DBin(t, 0)             '改写完成后的二进制数,用自定义函数改回十进制数值的 新字节内容。
  37.         Put #1, i + 1, B                 '把结果写入文件。(置换原来的字节)
  38.    
  39.     Next                               '整个循环结束。
  40.    
  41.     Close #1                          '关闭文件
  42.    
  43. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-7-13 22:59 | 显示全部楼层
附件中,每次先按下改写按钮,然后再按读取按钮确认对比。

数位改写.rar

12.3 KB, 下载次数: 60

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-14 00:21 | 显示全部楼层
香川群子 发表于 2012-7-13 22:51
代码写好了:

裙子老师,太感谢你了,不仅帮我做了,还怕我看不懂加了注释,感动中~~~,谢谢!!代码很强大,我学习下~

TA的精华主题

TA的得分主题

发表于 2015-11-5 21:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-30 21:41 , Processed in 0.037276 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表