Project1

标题: 谁知道有批处理填充二进制数据的软件吗? [打印本页]

作者: 赛露休斯    时间: 2011-11-21 16:28
标题: 谁知道有批处理填充二进制数据的软件吗?
本帖最后由 赛露休斯 于 2011-11-22 14:02 编辑

几千个文件长度不对,想在文件后面填充几个字节的空数据,谁知道有批处理填充二进制数据的软件吗?
作者: fux2    时间: 2011-11-21 16:54
本帖最后由 fux2 于 2011-11-21 17:13 编辑

vb可以吧

ole控件dragdrop函数
dim i,s() as byte
for i = 1 to Data.count
  open Data.Files(i) for Binary as #1
    Get #1,,s()
    redim s(lof(1)+补充字节长度) as byte
  close #1
  加字符处理
  open Data.Files(i) for Binary as #2
    Put #2,,s
  close #2
next i

作者: 禾西    时间: 2011-11-21 17:38
RM就可以了O O
File.size("xxxx")
然後你想填啥就 puts 吧= =
作者: 赛露休斯    时间: 2011-11-21 18:12
本帖最后由 赛露休斯 于 2011-11-21 18:49 编辑

vb的没看懂,装了vb,但不会用
RM的,我要在后面添加像 00 00 00 00 这样的该怎么做?
作者: DeathKing    时间: 2011-11-21 23:24
用C语言写了一个小工具,输出指定个数个 '\0',当然,应该要小于45个……

ab.rar (5.99 KB, 下载次数: 42)

别吐槽代码了……一分钟先生。(GCC编译通过)ab 5 >> your_file 即可向your_file末尾输出 5 个 00 。
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         if(argc > 2)
  5.                 return 0;
  6.                
  7.         char buf[] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', \
  8.                                    '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', \
  9.                                    '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', \
  10.                                    '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', \
  11.                                    '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' } ;
  12.         write(1, buf, atoi(argv[1]));
  13.         return 1;
  14. }
复制代码

作者: DeathKing    时间: 2011-11-22 13:51
本帖最后由 DeathKing 于 2011-11-22 13:53 编辑

这个东西当然要和批处理一起用啦,首先你要枚举你要添加的文件,然后计算需要添加的空字节个数。假定是由%NullChar%决定的,批处理大概就是这样:
遍历文件,并置变量%CurFileName%为当前文件名
计算需要添加的空字节个数,并置变量%NullChar%为响应值
ab %NullChar% >> %CurFileName%

使用Shell的重定向,而不直接在C语言编写的程序内进行读写操作,是因为我用的GCC……实现遍历文件不如直接用批处理实现更快。不过这个的字数仍然有限制,2K应该是很轻易的拉~
  1. /**********************************
  2. * Append Binary
  3. * author: DeathKing
  4. * date  : 2011-11-22
  5. **********************************/

  6. #include <stdio.h>
  7. #include <stdlib.h>

  8. int main(int argc, char *argv[])
  9. {
  10.   if(argc == 2) {
  11.     int c = atoi(argv[1]);
  12.     if(c > 32) {
  13.       char *block = (char *)malloc(sizeof(char) * c);
  14.       for(int i=0; i < c; ++i)
  15.         block[i] = '\0';
  16.       write(1, block, c);
  17.     } else {
  18.       char buf[32] = {  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',\
  19.                          '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',\
  20.                          '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',\
  21.                          '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' };
  22.       write(1, buf, c);
  23.       return 1;
  24.     }
  25.    } else {
  26.     printf("Usage: ab number to output 00 to stdout\n");
  27.     exit(EXIT_FAILURE);
  28.    }
  29. }
复制代码
ab.rar (19.17 KB, 下载次数: 39)
作者: 赛露休斯    时间: 2011-11-22 14:00
这个问题已经找到解决方法了,不过还是谢谢LS了
另外,批处理调用,是在cmd里调用吗?还没试出来,这方面不太了解,请教一下
作者: 熊猫    时间: 2011-11-22 14:02
嘿嘿,这个咱昨晚帮解决了。
基本和fux2思路一样。VB OLE。

ATTACH.rar

6.9 KB, 下载次数: 3






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1