`
mryufeng
  • 浏览: 982466 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

binary的这个bug R13A还没有修复

阅读更多
Edwin , thanks for your response!

2008/7/19 Edwin Fine <emofine@gmail.com>:

    Litao,

    I think this is a bug in Erlang R12B-3. Certainly the documentation can be misleading, because in Programming Examples (Section 4.6: Matching Binaries), it specifically says that this construct is not allowed:

    "Size must be an integer literal, or a previously bound variable. Note that the following is not allowed:

    foo(N, <<X:N,T/binary>>) ->
       {X,T}.

    The two occurrences of N are not related. The compiler will complain that the N in the size field is unbound."

    That being said, if you rewrite the expression as shown below, it will compile (but does not work). If I understand correctly, binary, bits, and bitstream are the same, except that the default bit size for binary is 8, and for bitstring it is 1. Since you are overriding the default size anyway, you can use binary-unit:11 in place of bits-unit:11.

    decode(<<N:5,Chans:N/binary-unit:11,_/bits>>) ->
        [Chan || <<Chan:11>> <- Chans].


    103> Chans3 = <<3:5,2:11,3:11,4:11>>.   
    <<24,2,0,96,4:6>>
    104> bb:decode(Chans3).
    N:3, Chans:<<0,64,12,2,0:1>>
    ** exception error: no case clause matching {<<0,64,12,2,0:1>>}
         in function  bb:'-decode/1-lc$^0/1-0-'/1
    105>

    The code is:

    -module(bb).
    -compile([export_all]).

    decode(<<N:5,Chans:N/binary-unit:11,_/bits>>) ->
        io:format("N:~p, Chans:~p~n", [N, Chans]),
        [Chan || <<Chan:11>> <- Chans].

    So even though the programming examples say that you can't use the same N in the match, it actually does work, but the list comprehension does not. I found out this is because a bitstring generator has to use "<=" and not "<-". So the final working code is:

    -module(bb).
    -compile([export_all]).

    decode(<<N:5,Chans:N/binary-unit:11,_/bits>>) ->
        [Chan || <<Chan:11>> <= Chans].

    118> c(bb).
    {ok,bb}
    119> Chans3 = <<3:5,2:11,3:11,4:11>>.
    <<24,2,0,96,4:6>>
    120> bb:decode(Chans3).            
    [2,3,4]

    Hope this helps.



    2008/7/18 litao cheng <litaocheng@gmail.com>:

        - Hide quoted text -
        hi, all.
        when I read this paper: Programming Efficiently with Binaries and Bit Strings http://www.erlang.se/euc/07/papers/1700Gustafsson.pdf, I encounter a compile error, the code snipes is a example to parse the IS 683-PRL protocol:

        decode(<<N:5,Chans:N/bits-unit:11,_/bits>>) ->
            [Chan || <<Chan:11>> <- Chans].

        the compiler says:
         bit type mismatch (unit) between 11 and 1

        I read the erlang reference mannual, the bits unit default is 1, I think the unit can be set, why this compile error occur? thank you!
        my erlang emulator is  5.6.3(R12B-3).

        _______________________________________________
        erlang-questions mailing list
        erlang-questions@erlang.org
        http://www.erlang.org/mailman/listinfo/erlang-questions

难道他们不想修????我等只能凑合用。
分享到:
评论
2 楼 mryufeng 2009-03-03  
郁闷呀 2008/7/19 到现在 都半年多了呀
1 楼 litaocheng 2009-03-03  

嘿嘿,委曲求全吧.呵呵.

相关推荐

    Cross-Architecture_Bug_Search_in_Binary_Executables.pdf

    问题限定在Bug Search,就是说,我们已知有一个bug,一个可能使用了该Bug代码的另一个架构的binary钟是否也有相同的Bug 问题范围缩小,不再是多对多的二进制代码(匹配,识别),对速度的要求降低 因为是我们已知Bug,...

    折半查找 binarySearch

    A binary search algorithm (or binary chop) is a technique for finding a particular value in a sorted list. It makes progressively better guesses, and closes in on the sought value, by comparing an ...

    android-ndk-r13b

    - **ABI支持**:R13b对新的ABI(Application Binary Interface)进行了支持,这有助于提高应用程序的兼容性和可移植性。 - **构建系统优化**:为了简化构建流程,R13b还对构建系统进行了优化,比如增加了对CMake的...

    Search in a Binary Search Tree.zip

    在"Search in a Binary Search Tree"这个主题中,我们主要探讨如何在二叉搜索树中高效地进行查找操作。查找操作的目标是找到树中与给定值相匹配的节点。由于二叉搜索树的特性,我们可以采用分治策略来实现快速查找:...

    Practical_Binary_Analysis

    ELF Format,Binary Analysis Fundamentals,Basic Binary Analysis in Linux,Disassembly and Binary Analysis Fundamentals

    Binary admin后台管理系统bootstrap模板

    而"btts_47_binary-Admin-v1.1"很可能是Binary admin模板的特定版本,"v1.1"表示这是该模板的第一个更新版本,可能修复了一些bug,增加了新功能或改进了用户体验。 综合这些信息,Binary admin后台管理系统...

    深圳证券交易所Binary行情数据接口规范(Ver1.03)_深交所binary行情_

    《深圳证券交易所Binary行情数据接口规范(Ver1.03)》是针对深证市场行情数据传输的一个技术文档,旨在为开发人员提供一种高效、精确地获取和解析行情信息的方法。该规范详细阐述了如何利用二进制(binary)格式进行...

    cef_binary2

    集成chrome 内核收集到的 cef_binary , 包含cef 1x,2x,41,43 版本。 具体看 https://www.spotify.com/sg-en/opensource/ cef 对应 chrome版本 cef_binary_3.2357.1271.g8e0674e_windows32 cef_binary_3....

    Zemax使用Binary-2面型设计案例,How-to-use-Binary-2.zip

    在光学设计领域,Zemax是一款广泛使用的光学设计软件,它提供了强大的工具来模拟和优化各种...通过学习这个案例,光学设计师可以掌握如何利用Binary-2面型进行创新的光学设计,并将这种方法应用到实际的光学系统中。

    Exact maximum a posteriori estimation for binary images

    Exact maximum a posteriori estimation for binary images 图像处理 重要论文

    amoeba-mysql-binary-2.2.0.tar.gz

    amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gzamoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz ...

    cef_binary_3.2623.1401.gb90a3be_windows32.7z

    cef_binary_3.2623.1401.gb90a3be_windows32.7z cef_binary_3.2623.1401.gb90a3be_windows32.7z cef_binary_3.2623.1401.gb90a3be_windows32.7z

    cef_binary_3.2623.1401.gb90a3be_windows64

    在"cef_binary_3.2623.1401.gb90a3be_windows64"这个压缩包中,可能包含CEF库的动态链接库文件(如libcef.dll)、头文件、示例代码、以及必要的配置文件,这些资源可以帮助开发者在自己的Windows 64位应用中快速集成...

    CSAPP Lab2: Defusing a Binary Bomb实验材料

    《深入理解计算机系统》(CSAPP)是一本深入探讨计算机硬件与软件交互的权威教材,其第二实验室——“Defusing a Binary Bomb”是一项旨在帮助学生理解计算机执行过程、内存管理和程序调试的重要实践环节。在这个...

    groovy-binary-1.8.6

    这个版本可能修复了一些已知的bug,优化了性能,或者增加了新的功能和特性。使用这个版本时,开发者需要确保系统中已经安装了对应的JVM,并且可以根据项目需求配置相应的构建工具和依赖管理。 总的来说,Groovy-...

    cef_binary_3.2623.1401.gb90a3be_windows32-支持MP4.zip

    这个版本号3.2623.1401 gb90a3be表明这是一个更新到某个特定日期的分支,可能包含了bug修复、性能优化和其他改进。 对于MP3和MP4的支持,这意味着CEF在这个版本中集成了必要的解码器,使得应用程序能够流畅地播放这...

    launch failed binary not found(图文)手把手教你解决

    这篇文章将详细地指导如何解决这个问题,并确保您能够顺利地运行您的C++程序。 #### 前提条件 首先,确保您的系统已经安装了`gcc`和`g++`这两个编译器。如果您使用的是Ubuntu系统,可以通过终端执行以下命令来安装...

    amoeba-mysql-binary

    3. **changelogs.txt**:变更日志记录了项目从早期版本到当前版本的所有更改,包括新功能、性能优化、bug修复等。通过阅读这个文件,用户可以了解每个版本的改进,以便决定是否升级到新版本。 4. **benchmark**:这...

    a signed binary multiplication technique

    booth在1950年发表的关于booth算法的论文。感兴趣可参考。

    cef_binary_3.3071.1611.g4a19305_windows64.zip

    标题中的"cef_binary_3.3071.1611.g4a19305_windows64.zip"指示了这是一个CEF(Chromium Embedded Framework)的二进制文件,版本号为3.3071.1611,g4a19305可能是该版本的特定Git哈希值,表明了源代码的特定修订版...

Global site tag (gtag.js) - Google Analytics