2008-09-26 16 views
17

Tôi đã tải xuống Hex Workshop và tôi được yêu cầu đọc một tệp .dbc.Ai đó có thể giải thích sự bù đắp cho tôi?

Nó nên chứa 28.315 nếu bạn đọc bù đắp 0x04 và 0x05

Tôi không chắc chắn làm thế nào để làm điều này? 0x04 có nghĩa là gì?

+5

Tại sao câu hỏi này được đánh dấu? Đó là một câu hỏi hoàn toàn hợp lệ. –

+0

Xem có bao nhiêu câu trả lời chất lượng tốt hơn mà bạn nhận được với một câu hỏi phù hợp? – GEOCHET

Trả lời

9

0x04 là hex cho 4 (0x chỉ là một quy ước tiền tố chung cho số 16 đại diện của các số - vì nhiều người nghĩ theo số thập phân) và đó sẽ là byte thứ tư (vì chúng được gọi là offset) byte đầu tiên là byte 0, do đó, offset 0x04 sẽ là byte thứ 5).

Tôi đoán họ đang nói rằng các byte thứ 4 và thứ 5 với nhau sẽ là 28315, nhưng họ có nói nếu điều này là nhỏ gọn hoặc lớn-endian?

28315 (thập phân) là 0x6E9B trong ký hiệu thập lục phân, có thể trong tệp theo thứ tự 0x9B 0x6E nếu nó nhỏ gọn.

Lưu ý: Little-endian và big-endian tham khảo các byte đơn đặt hàng được viết. Con người ký hiệu điển hình ghi số thập phân và thập lục phân trong một cách lớn về cuối nhỏ, vì vậy:

256 sẽ được viết như 0x0100 (chữ số ở bên trái là quy mô lớn nhất)

Nhưng mà phải mất hai byte và hệ thống ít về cuối nhỏ sẽ viết byte thấp trước tiên: 0x00 0x01. Các hệ thống lớn sẽ ghi byte cao đầu tiên: 0x01 0x00.

Thông thường, các hệ thống của Intel là ít người dùng và các hệ thống khác khác nhau.

+0

@OregonGhost: Hy vọng bạn không phiền, tôi cảm thấy sự bổ sung của bạn xứng đáng là một phần của câu trả lời đó. – GEOCHET

1

Bắt đầu here. Khi bạn tìm hiểu cách đọc các giá trị thập lục phân, bạn sẽ có hình dạng tốt hơn nhiều để thực sự giải quyết vấn đề của mình.

1

0x04 trong hex có 4 chữ số thập phân. 0x10 trong hex là 16 thập phân. calc.exe có thể chuyển đổi giữa hex và thập phân cho bạn.

Bù trừ 4 nghĩa là 4 byte từ đầu tệp. Offset 0 là byte đầu tiên trong tập tin.

2

Đó là lần thứ 4 và mã XX 5th xem bạn ...

 
1 2 3 4 5 6 
01 AB 11 7B FF 5A 

Vì vậy, 0x04 và 0x05 là "7B" và "FF".

Giả sử bạn đang nói gì, trong trường hợp của bạn 7BFF phải bằng với giá trị mong muốn của bạn.

HTH

1

Nhìn vào byte 4 và năm họ cần phải có các giá trị 0x6E 0x9B (hoặc 0x9B 0x6E) tùy thuộc vào endianess của bạn.

2

Hãy nghĩ về tệp nhị phân dưới dạng mảng tuyến tính của byte.

0x04 sẽ là phần tử thứ 5 (trong một mảng dựa trên 0) trong mảng và 0x05 sẽ là thứ 6.

Hai giá trị trong 0x04 và 0x05 có thể được OR cùng nhau để tạo số 28.315.

Kể từ khi giá trị mà bạn đang đọc là 16 bit, bạn cần phải bitshift một giá trị hơn và sau đó HOẶC chúng lại với nhau, ví dụ: nếu bạn đang thao tác với các tập tin trong C#, bạn sẽ sử dụng một cái gì đó như thế này:

int value = (ByteArray[4] >> 8) | ByteArray[5]); 

Hy vọng điều này sẽ giúp giải thích cách địa chỉ hex hoạt động.