Skip to content
PDU decoder

Online PDU Decoder for SUBMIT, DELIVER and STATUS-REPORT

Paste a PDU and read it field by field: service centre, address, encoding, timestamp, concatenation and the decoded text. When a field is broken, the decoder names it instead of returning a blank page.

SUBMIT, DELIVER, STATUS-REPORTMulti-part awareRuns offline

Decode a PDU in the browser

The box starts with the SMS-SUBMIT frame produced by the encoder. Paste any frame, press Decode, and read the fields below it.

PDU decoder

Offline

Whitespace is ignored. Separate several PDUs with a blank line or with the ----- PDU n/total ----- markers from the encoder.

Decoded fields

Text, timestamps and the concatenation reference are shown exactly as the frame carries them. The decoder never rewrites the input.

Nothing is uploaded. The frame is read by JavaScript in this page, so a PDU from a private message store stays on your machine.

Text mode vs PDU mode

The same message looks different depending on which mode captured it.

What you seeText mode outputPDU mode output
Message bodyReadable charactersHex octets; the text is packed or big-endian encoded
EncodingChosen by the modemExplicit in the data coding scheme octet
Long messagesThe modem hides the splitThe UDH shows the reference, the part number and the total
TimestampsLocal formatting, if shown at allThe service centre timestamp with its time zone octet
Delivery reportsSummarisedFull status report frame with two timestamps and a status octet

Text mode reads a message the way a person would. PDU mode reads it the way the network stores it. When something fails, the second view is the one that tells you which field is wrong.

SMS-DELIVER field structure

A delivered message arrives without a destination or a validity period, and carries a timestamp instead.

FieldOctetsMeaning
SCA1 + nService centre that handled the message; 00 means the frame omits it
First octet1Message type, more-messages flag and user-data header flag
Originator2 + nSender address, with 91 for an international number
PID1Protocol identifier
DCS1Alphabet, class and compression bits
SCTS7Service centre timestamp: year, month, day, hour, minute, second and time zone
UDL1Septet count for GSM-7, octet count for UCS-2
UDnOptional UDH plus the text

The timestamp is not a Unix value. Each date field is decimal digits stored in swapped nibbles, and the last octet carries the offset from UTC in quarter-hours.

STATUS-REPORT fields

A status report replaces the user data with two timestamps and a result code.

FieldOctetsMeaning
First octet1Message type 02, plus the status-report-qualifier flag if set
MR1The message reference the handset returned when it sent the message
Recipient2 + nThe number the message was sent to
SCTS7When the service centre received the message
Discharge time7When the service centre delivered it, in the same timestamp format
Status100–1F delivered; 20–3F temporary error, still trying; 40–5F permanent error; 60–7F temporary error, given up

A status report has no user data. If the frame is longer than these fields, the extra octets are reported as a warning rather than decoded.

Where messages fail to decode

Most failures are copy errors, not broken messages. The decoder names the field it could not read.

InputMessage shownWhat went wrong
00110009812143The address is shorter than its declared length.Destination length says 9 digits, but only two octets follow.
0011AHex length is odd (5 nibbles). A PDU must contain whole bytes.A character was lost while copying, so the last byte is incomplete.
004100098121436587F9000006070003010201UDH length 7 exceeds the user data.The user-data header length octet claims more bytes than the frame carries.

The decoder also rejects a frame whose service centre length runs past the end of the input, an address that ends early, a truncated timestamp and an SMS-COMMAND frame, which is a different message type. An 8-bit data coding scheme is shown as a binary length rather than fake text. Unknown extension characters and a stray escape code are dropped with a warning instead of turning the whole message into noise.

These three inputs are part of the same regression file as the encoder. Each expected error is stored as a substring, so a wording change in the decoder cannot silently pass.

Need an automated solution?

Use this page to inspect one frame. Use SMS Deliverer to handle the traffic.

The Windows application decodes incoming messages, reassembles multipart frames, stores the sender and the timestamp, and keeps delivery reports against the original send. The same parser is used by the desktop interface and the local HTTP API, so a message looks identical wherever you read it.

Start with the GSM modem guide for the hardware, the desktop software page for the receiving features, or the PDU encoder to build a frame for a test.

Supported frames

  • SMS-SUBMIT, including concatenated parts
  • SMS-DELIVER with timestamp and originator
  • SMS-STATUS-REPORT with both timestamps
  • GSM-7, extension characters and UCS-2
  • 8-bit UDH, 16-bit reference and port addressing

Reviewed 2026-11. SMS-COMMAND frames are rejected by design; they are not message traffic.

Questions buyers ask

Why does the decoder say the service centre is not in the PDU?

A leading 00 means the frame has no service centre address, so the handset or modem uses the one stored on the SIM. The rest of the frame still decodes normally.

Can it decode a delivery report and a multipart message?

Yes. SMS-STATUS-REPORT frames show both timestamps and the status octet. For multipart messages the UDH is read and the part shows its reference, its sequence number and the total.

Why is part of my message shown as binary content?

The data coding scheme in that frame declares 8-bit data rather than text. The decoder reports the octet count instead of inventing characters that are not there.

Does the decoder send my PDU anywhere?

No. Parsing happens in this browser. The page also works offline, which matters when the message contains private numbers or content.