当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 16:41 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
保存在硬盘上的文件, 据我有限的知识, 不论是什么形式, "最终"都是0和1的组合.

那么有什么方法把某个保存在硬盘上的文件所对应的"1"在硬盘上变成"0", 把所有的"0"变成"1"呢?

C语言里貌似可以用"~"来转换变量的0和1, 但若是对于一整个文件该如何处理呢?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:10 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
可以是可以……有意义吗?……
[c]#include <stdio.h>

int main()
{
int ch;
while ((ch = getchar()) != EOF)
putchar(~ch);
return 0;
}
[/c]
[bash]
$ gcc -o revbit revbit.c
$ cat file_a | ./revbit > file_b
[/bash]


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:35 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
如果要加密,加密文件头的前128字节就是。xor异或吧,可以带上自己的加密字典。取反蛋疼。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:43 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
cjxgm 写道:
可以是可以……有意义吗?……
[c]#include <stdio.h>

int main()
{
int ch;
while ((ch = getchar()) != EOF)
putchar(~ch);
return 0;
}
[/c]
[bash]
$ gcc -o revbit revbit.c
$ cat file_a | ./revbit > file_b
[/bash]


谢谢. 当然有意义了, 就是阿姨讲得, 可以加密呀. 若是带上字典或者自定义规则, 比如3*n的翻转,会更好. 或者给加密后的再加密一层

对了, 这个程序可不可以写成./revbit inputfile outputfile 的格式?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


最后由 yjcong 编辑于 2013-04-29 19:49,总共编辑了 2 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:44 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
如果要加密,加密文件头的前128字节就是。xor异或吧,可以带上自己的加密字典。取反蛋疼。


阿姨不愧是阿姨, 直觉够敏锐. 看样子阿姨一定是写过这方面的代码了, 可以分享一下吗?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:47 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
dos时代经常搞这事情。没代码。
你改改上面的例子,同时读入源文件和字典文件,直接异或就是。


_________________
● 鸣学


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:54 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
dos时代经常搞这事情。没代码。
你改改上面的例子,同时读入源文件和字典文件,直接异或就是。

明白了, 再次谢谢阿姨解惑.

对了, 你写的那些代码现在都放哪了?还打算什么时候开始学perl时, 拿来参考一番呢. 记得opera那有一部分, 后来网址找不到了. 然后GitHub上也有一部分, 但不全


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 19:56 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
废弃了上百个脚本。剩下的都在github。


_________________
● 鸣学


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 20:02 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
废弃了上百个脚本。剩下的都在github。

这样啊. 我也常"废弃"脚本, 但一共也没写够100个.

既然堵到阿姨了, 就再请教一下你对手机/操作系统的看法吧. 估计过几个月, 市面上会有ifone, android, ubuntuFone, jola, firefoxOS.......... 阿姨会选哪个手机搭配那个系统呢?还有啊, 阿姨有没有写过手机用的脚本什么的?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 20:10 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
手机只是一个工具,没写过东西啊。irc的破马是写手机java程序的。你去问吧。
btw: 现在使用移动合约机。root都不想搞了。


_________________
● 鸣学


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 20:19 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
手机只是一个工具,没写过东西啊。irc的破马是写手机java程序的。你去问吧。
btw: 现在使用移动合约机。root都不想搞了。


我特别喜欢nokia N9的样子, 结果meego没了. 也不知道jola的样子会是什么. 打算着若是ubuntuFone可以装到nokia上的话, 可以入手个装windows的nokia.

又想起来个一直在疑惑着我的问题, 就是, 若是不需要交互, 只是需要启动, 并在后台运行GUI软件, 那么, linux可以不启动X吗? 比如skype好了, 我设置好自动登录, 而我仅仅是需要让别人看到我在线,而启动后不需要对skype进行任何操作, 那么, 我可以在运行startx之前"虚拟"的运行skype吗?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 22:15 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
就一行的事,干嘛一定要C
[bash]perl -ne 'print~$_' file_in > file_out[/bash]
阿姨把它写得更短些吧
(要是 print 和 $_ 也能省略掉就好了)


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-29 22:27 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
cjxgm 写道:
就一行的事,干嘛一定要C
[bash]perl -ne 'print~$_' file_in > file_out[/bash]
阿姨把它写得更短些吧
(要是 print 和 $_ 也能省略掉就好了)

谢谢, 这个够短. 但有2个疑问, 1)在处理大文件上,比如几百M, 几G的数据, 是不是会比C写的慢?2)这个不好加规则或者带字典吧?


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-30 14:46 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
yjcong 写道:
1)在处理大文件上,比如几百M, 几G的数据, 是不是会比C写的慢?

据网上传言,perl速度和C语言差不多,甚至比C语言快(http://raid6.com.au/~onlyjob/posts/arena/)。
我也实测了一下:
[bash]
cjxgm@cjprods /tmp$ ls -lh ti
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:48 ti
cjxgm@cjprods /tmp$ time sh -c "perl -ne 'print~\$_' ti > tout"

real 0m0.522s
user 0m0.353s
sys 0m0.080s
cjxgm@cjprods /tmp$ time sh -c "perl -ne 'print~\$_' ti > tout"

real 0m0.520s
user 0m0.340s
sys 0m0.083s
cjxgm@cjprods /tmp$ time sh -c "./a ti > tout2"

real 0m2.090s
user 0m1.857s
sys 0m0.067s
cjxgm@cjprods /tmp$ time sh -c "./a ti > tout2"

real 0m2.093s
user 0m1.777s
sys 0m0.143s
cjxgm@cjprods /tmp$ diff tout tout2
cjxgm@cjprods /tmp$ # 无输出,证明“置反”的结果正确
cjxgm@cjprods /tmp$ ls -lh
总用量 104M
-rwxr-xr-x 1 cjxgm users 5.2K 4月 30 14:51 a
-rw-r--r-- 1 cjxgm users 201 4月 30 14:51 a.c
drwx------ 2 cjxgm users 80 4月 30 12:20 CRX_75DAF8CB7768
srw------- 1 cjxgm users 0 4月 30 10:56 fcitx-socket-:0
drwxrwxrwt 2 root root 40 4月 30 10:56 systemd-private-AZLCqa
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:48 ti
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:50 tout
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:52 tout2
cjxgm@cjprods /tmp$ cat a.c
#include <stdio.h>

int main(int argc, char * argv[])
{
if (argc != 2) return 1;
freopen(argv[1], "r", stdin);
int ch;
while ((ch = getchar()) != EOF)
putchar(~ch);
fclose(stdin);
return 0;
}
[/bash]
估计perl比C快是优化的缘故。
yjcong 写道:
2)这个不好加规则或者带字典吧?

如果你会 perl,可以轻而易举地加规则或者带字典


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 如何"翻转"文件的0和1
帖子发表于 : 2013-04-30 16:15 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
cjxgm 写道:
yjcong 写道:
1)在处理大文件上,比如几百M, 几G的数据, 是不是会比C写的慢?

据网上传言,perl速度和C语言差不多,甚至比C语言快(http://raid6.com.au/~onlyjob/posts/arena/)。
我也实测了一下:
[bash]
cjxgm@cjprods /tmp$ ls -lh ti
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:48 ti
cjxgm@cjprods /tmp$ time sh -c "perl -ne 'print~\$_' ti > tout"

real 0m0.522s
user 0m0.353s
sys 0m0.080s
cjxgm@cjprods /tmp$ time sh -c "perl -ne 'print~\$_' ti > tout"

real 0m0.520s
user 0m0.340s
sys 0m0.083s
cjxgm@cjprods /tmp$ time sh -c "./a ti > tout2"

real 0m2.090s
user 0m1.857s
sys 0m0.067s
cjxgm@cjprods /tmp$ time sh -c "./a ti > tout2"

real 0m2.093s
user 0m1.777s
sys 0m0.143s
cjxgm@cjprods /tmp$ diff tout tout2
cjxgm@cjprods /tmp$ # 无输出,证明“置反”的结果正确
cjxgm@cjprods /tmp$ ls -lh
总用量 104M
-rwxr-xr-x 1 cjxgm users 5.2K 4月 30 14:51 a
-rw-r--r-- 1 cjxgm users 201 4月 30 14:51 a.c
drwx------ 2 cjxgm users 80 4月 30 12:20 CRX_75DAF8CB7768
srw------- 1 cjxgm users 0 4月 30 10:56 fcitx-socket-:0
drwxrwxrwt 2 root root 40 4月 30 10:56 systemd-private-AZLCqa
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:48 ti
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:50 tout
-rw-r--r-- 1 cjxgm users 35M 4月 30 14:52 tout2
cjxgm@cjprods /tmp$ cat a.c
#include <stdio.h>

int main(int argc, char * argv[])
{
if (argc != 2) return 1;
freopen(argv[1], "r", stdin);
int ch;
while ((ch = getchar()) != EOF)
putchar(~ch);
fclose(stdin);
return 0;
}
[/bash]
估计perl比C快是优化的缘故。
yjcong 写道:
2)这个不好加规则或者带字典吧?

如果你会 perl,可以轻而易举地加规则或者带字典


谢谢, 刚才试了一下几百M的文件, 确实perl比C快了许多, 即便gcc -O2, 看来确实要学学perl了


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译