这来自RFC 3749(传输层安全协议压缩方法):
- 醇>
压缩方法
TLS [2]包括以下压缩方法结构 第6.1和7.4.1.2节以及附录A.4.1和A.6节:
enum { null(0), (255) } CompressionMethod;
我对C并不熟悉,但我知道足以将其标记为C enum
的相似性。但我无法理解的是null(0)
和(255)
部分。我无法在任何地方找到括号和null在这种情况下的含义。
(我似乎很难想出一个(谷歌?)搜索模式,它包含的内容比“rfc”,“null”,“c”,“括号”更普遍,并且会引导我到其他地方而不是关于“空函数指针”或最基本的基础知识的问题。)
那么这些符号在语法上意味着什么?
为什么括号中有255?
为什么null
看起来像是函数调用?
这甚至应该是C?或者它是跨RFC共享的常见符号?如果它是C,它是否特定于enum
?
这与enum { 0, 255 } CompressionMethod;
或enum { NULL, 255 } CompressionMethod;
有什么不同?
答案 0 :(得分:4)
你可能会在这里过度推理:)
你应该引用你引用后面的行:
which allows for later specification of up to 256 different
compression methods.
这已经解释了这条线的含义。现在,如果您按照[2]
跟踪参考列表,您会发现它引用了RFC 2246。该文件包含以下段落:
4. Presentation language
This document deals with the formatting of data in an external
representation. The following very basic and somewhat casually
defined presentation syntax will be used. The syntax draws from
several sources in its structure. Although it resembles the
programming language "C" in its syntax and XDR [XDR] in both its
syntax and intent, it would be risky to draw too many parallels. The
purpose of this presentation language is to document TLS only, not to
have general application beyond that particular goal.
因此,RFC的作者似乎已经从熟悉的元素中编写了一个简单的语法来简化RFC主题的表示,即TLS。对于枚举,它们指定4.5中使用的语言:
4.5. Enumerateds
An additional sparse data type is available called enum. A field of
type enum can only assume the values declared in the definition.
Each definition is a different type. Only enumerateds of the same
type may be assigned or compared. Every element of an enumerated must
be assigned a value, as demonstrated in the following example. Since
the elements of the enumerated are not ordered, they can be assigned
any unique value, in any order.
enum { e1(v1), e2(v2), ... , en(vn) [[, (n)]] } Te;
Enumerateds occupy as much space in the byte stream as would its
maximal defined ordinal value. The following definition would cause
one byte to be used to carry fields of type Color.
enum { red(3), blue(5), white(7) } Color;
One may optionally specify a value without its associated tag to
force the width definition without defining a superfluous element.
In the following example, Taste will consume two bytes in the data
stream but can only assume the values 1, 2 or 4.
enum { sweet(1), sour(2), bitter(4), (32000) } Taste;
The names of the elements of an enumeration are scoped within the
defined type. In the first example, a fully qualified reference to
the second element of the enumeration would be Color.blue. Such
qualification is not required if the target of the assignment is well
specified.
Color color = Color.blue; /* overspecified, legal */
Color color = blue; /* correct, type implicit */
For enumerateds that are never converted to external representation,
the numerical information may be omitted.
enum { low, medium, high } Amount;
答案 1 :(得分:0)
它的含义CompressionMethod.null
的值为0
,然后保留255
个插槽:
which allows for later specification of up to 256 different
压缩方法
答案 2 :(得分:0)
(255)
会通知您此字段的大小。因此,对于编码,您需要知道需要多少字节。如果是(400)
,则需要2个字节来为compressionMethod.null
或0x00 + 0x00
指定0。因为255可以表示为1个字节,所以只需要0x00
。
基本上它可以让你知道枚举字段的大小。