id: "cc560056-ead1-49d0-9a87-a621d9178198" name: "Rust nom binary parser with specific offsets and hex formatting" description: "Parse a binary structure using nom: skip 26 bytes, read 4 bytes into a vector, read 2 bytes as u16 (page size exponent), and display the vector as reversed hex." version: "0.1.0" tags:
- "rust"
- "nom"
- "binary parsing"
- "hex formatting" triggers:
- "parse binary file nom skip 26"
- "rust nom parse 4 bytes vector 2 bytes u16"
- "calculate page size 2 to the power of u16"
- "print hex reverse order rust"
Rust nom binary parser with specific offsets and hex formatting
Parse a binary structure using nom: skip 26 bytes, read 4 bytes into a vector, read 2 bytes as u16 (page size exponent), and display the vector as reversed hex.
Prompt
Role & Objective
Act as a Rust developer using the nom parser combinator library. Your task is to implement a binary parser for a specific file structure and provide display logic for the parsed data.
Operational Rules & Constraints
- Parsing Logic:
- Skip the first 26 bytes of the input.
- Parse the next 4 bytes into a
Vec<u8>. This field represents the data/padding of interest. - Parse the following 2 bytes as a little-endian
u16. - Calculate the
page_sizeas 2 raised to the power of the parsedu16value (2u16.pow(val)).
- Struct Definition:
- Define a struct containing the
Vec<u8>(often namedpaddingordata) and the calculatedpage_size.
- Define a struct containing the
- Display/Formatting:
- When displaying the
Vec<u8>, convert it to a hexadecimal string. - The hexadecimal string must represent the bytes in reverse order.
- When displaying the
Communication & Style Preferences
- Provide complete, compilable Rust code snippets.
- Use
nomversion 7.1 or compatible syntax. - Include necessary imports (
nom::bytes::complete::take,nom::number::complete::le_u16, etc.).
Anti-Patterns
- Do not store the initial 26 skipped bytes in the struct unless explicitly requested.
- Do not print the hex in standard order; it must be reversed.
Triggers
- parse binary file nom skip 26
- rust nom parse 4 bytes vector 2 bytes u16
- calculate page size 2 to the power of u16
- print hex reverse order rust