asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
asn1c doesn't extract DEFAULT value of an OCTET STRING from the asn.1 module
我想解析SIMAlliance eUICC Profile Package ASN.1模块并将其编码为DER。keyAccess
参数是一个值为'00'H
DEFAULT
的OCTET STRING
。ASN1C 编译器无法检测/提取默认值并将其分配给编译器生成的相应函数。如果我将OCTET STRING
更改为模块中的IA5String
之类的其他内容,则可以正常工作,但不应更改标准。另外,该值应为八位字节字符串。
我已经深入研究了 asn1c 的代码,但我无法弄清楚它提取并将OCTET STRING
的DEAFAULT
值分配给编译期间生成的函数的机制/过程。这方面的任何帮助都是有意义的,非常感谢 - 这对我来说是救命稻草。
SIMAlliance eUICC 配置文件包 ASN.1 模块可以在这里找到,asn1c 的存储库在这里。
keyAccess 参数是一个默认值为 '00'H 的八进制字符串。 ASN1c 编译器无法检测/提取默认值并将其分配给编译器生成的相应函数。如果我将八进制字符串更改为模块中的其他内容,例如 IA5String ,它可以正常工作
这听起来像是缺少功能或asn1c
中的错误。
我已经深入研究了 asn1c 的代码,但我无法弄清楚它提取八位字节字符串的 DEAFAULT 值并将其分配给它在编译期间生成的函数的机制/过程。这方面的任何帮助都是有意义的,非常感谢 - 这对我来说是救命稻草。
生成asn_DFL_4_cmp_1
和asn_DFL_4_set_1
等函数的代码位于 libasn1compiler/asn1c_C.c:2329-2487 中的try_inline_default()
函数中
static int
try_inline_default(arg_t *arg, asn1p_expr_t *expr, int out) {
int save_target = arg->target->target;
asn1p_expr_type_e etype = expr_get_type(arg, expr);
int fits_long = 0;
switch(etype) {
case ASN_BASIC_BOOLEAN:
fits_long = 1;
/* Fall through */
case ASN_BASIC_INTEGER:
case ASN_BASIC_ENUMERATED:
libasn1compiler/asn1c_C.c:2311-232 中也有emit_default_string_value()
函数
static void
emit_default_string_value(arg_t *arg, asn1p_value_t *v) {
OUT("static const uint8_t defv[] = ");
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 如何提取给定数字的 p MSB 位
- 检查 IP 第一个八位字节是否不以 127 / 224 或 255 开头
- C 正则是从字符串中提取所有可能的10位数字
- 如何在 c++ 中使用 FFT 从 32 位浮点数组中提取频率
- 将 __m128i?布尔数组中每个布尔字节的低位提取到打包的位图
- 在 std::string 中使用非法的 UTF-8 八位字节作为分隔符
- 将转义的 UTF-8 八位字节的字符数组转换为 C++ 的字符串
- 从位图提取像素数据的问题
- 从 2 个 uint64 值中提取诡异哈希 128 位值
- 使用位操作员将十进制转换为八十位
- 从带有位偏移量的std::字符串中按字节提取连续位
- 从变量中提取八位字节int64_t
- 我可以将指针地址(即十六进制整数)转换为C 中的十进制和八分位基础
- 在Boost :: Dynamic_bitset中提取设置的位索引
- 将SSE转换为霓虹灯:如何打包然后提取32位结果
- 正在从std::字符串流中提取位到std::位集
- 有没有一种简单的方法可以在Visual Studio中编写UTF-8八位字节
- 将 tiff 图像转换为字符串,以作为二进制应用程序/八位字节流 (C++) 发布
- 具有非八位对齐子字段的96位长位域