首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ns-2中video.dat中的文件大小不正确

ns-2中video.dat中的文件大小不正确
EN

Stack Overflow用户
提问于 2013-02-28 01:56:42
回答 1查看 541关注 0票数 1

我正在使用一个tcl脚本,该脚本获取电影文件跟踪并将其转换为二进制文件,以供ns-2中的应用程序代理进一步使用。以下是将电影文件轨迹转换为二进制文件的脚本代码片段:

代码语言:javascript
复制
set original_file_name Verbose_Silence_of_the_Lambs_VBR_H263.dat
set trace_file_name video.dat
set original_file_id [open $original_file_name r]
set trace_file_id [open $trace_file_name w]
set last_time 0
while {[eof $original_file_id] == 0} {
    gets $original_file_id current_line
    if {[string length $current_line] == 0 ||
    [string compare [string index $current_line 0] "#"] == 0} {
       continue  
    }

    scan $current_line "%d%s%d" next_time type length
    set time [expr 1000*($next_time-$last_time)]
    set last_time $next_time
    puts -nonewline $trace_file_id [binary format "II" $time $length]
}
close $original_file_id
close $trace_file_id 

但是,当我进一步使用这个创建的video.dat文件来生成应用程序代理使用的流量时,我得到了以下错误:

代码语言:javascript
复制
Bad file siz in video.dat
Segmenatation fault

希望你能在这件事上有所收获。代码中二进制格式"II“的含义是什么?因为我没有在tcl-binary(n)文档中找到它,或者它已经过时了并且现在不受支持。

EN

回答 1

Stack Overflow用户

发布于 2013-04-10 02:38:25

问题可能是你没有在二进制模式下打开你的文件。

变化

代码语言:javascript
复制
set trace_file_id [open $trace_file_name w]

代码语言:javascript
复制
set trace_file_id [open $trace_file_name wb]

否则Tcl将更改输出,例如在windows上用\r\n替换\n。(对于大于127的字节值,它将被视为unicode代码点,然后转换为您的系统编码,从而弄乱您的整个二进制代码)虽然这样的事情对文本文件来说是很好的,但它会在二进制文件中产生问题。

幸运的是,只需要一个字符就可以解决这个问题:b作为open的修饰符

编辑:我刚刚在Tcl的change list中查找了一下,open的b修饰符添加了8.5。我通常只使用8.5或8.6,所以如果您使用的是旧版本的Tcl,请在open后面添加以下代码:

代码语言:javascript
复制
fconfigure $trace_file_id -translation binary

b修饰符只是一个快捷方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15118966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档