Tôi đã tìm thấy điều này post về cách mã hóa dữ liệu ascii thành bộ ký tự GSM 7 bit, làm cách nào để giải mã ký tự GSM 7 bit một lần nữa (đảo ngược lại thành ascii)?giải mã 7-bit GSM
Trả lời
Đối python2:
import binascii
gsm = ("@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞ\x1bÆæßÉ !\"#¤%&'()*+,-./:;<=>?"
"¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑÜ`¿abcdefghijklmnopqrstuvwxyzäöñüà")
ext = ("````````````````````^```````````````````{}`````\\````````````[~]`"
"|````````````````````````````````````€``````````````````````````")
def gsm_encode(plaintext):
result = []
for c in plaintext:
idx = gsm.find(c)
if idx != -1:
result.append(chr(idx))
continue
idx = ext.find(c)
if idx != -1:
result.append(chr(27) + chr(idx))
return ''.join(result).encode('hex')
def gsm_decode(hexstr):
res = hexstr.decode('hex')
res = iter(res)
result = []
for c in res:
if c == chr(27):
c = next(res)
result.append(ext[ord(c)])
else:
result.append(gsm[ord(c)])
return ''.join(result)
code = gsm_encode("Hello World {}")
print(code)
# 64868d8d903a7390938d853a1b281b29
print(gsm_decode(code))
# Hello World {}
Có một giải pháp rất đơn giản:
Chuyển đổi hex trong octet nhị phân Đặt mỗi octet trong một mảng nhưng theo thứ tự ngược (toàn bộ octet, không phải là bit) bởi vì đó là cách họ được gửi đi. Đọc chuỗi từ phải sang trái trong 7 nhóm bit Số là mã nhân vật trong GSM 7 bit bảng
Ví dụ:
C7F7FBCC2E03 là viết tắt của 'Google'
Chuỗi theo thứ tự ngược lại là
03-2E-CC-FB-F7-C7
sáu octet là
00000011-00101110-11001100-11111011-11110111-1 1000111
Các septets là
000000-1100101-1101100-1100111-1101111-1101111-1000111
đọc rồi từ phải sang trái là:
Septet-thập phân dũng cảm-Char trong GSM 7bit bảng
1000111-71-G
1101111-111-o
1.101.111-111-o
1100111-103-g
1101100-108-l
1100101-101-e
Huỷ các 0000000 giá trị cuối cùng
Ví dụ:
C7F7FBCC2E03 là viết tắt của 'Google'
Python 3.4
def gsm7bitdecode(f):
f = ''.join(["{0:08b}".format(int(f[i:i+2], 16)) for i in range(0, len(f), 2)][::-1])
return ''.join([chr(int(f[::-1][i:i+7][::-1], 2)) for i in range(0, len(f), 7)])
in (gsm7bitdecode ('C7F7FBCC2E03'))
Cũng làm việc cho Python 2.7.11 –
Tôi đã viết such decoder trong c cho thiết bị openwrt:
uint8_t get_data (char input, uint8_t * output)
{
if (input - '0' >= 0 && '9' - input >= 0) {
* output = input - '0';
} else if (input - 'a' >= 0 && 'f' - input >= 0) {
* output = input - 'a' + 10;
} else if (input - 'A' >= 0 && 'F' - input >= 0) {
* output = input - 'A' + 10;
} else {
return 1;
}
return 0;
}
uint8_t get_data_pair (const char * input, uint8_t * output)
{
uint8_t data;
if (get_data (* input, &data) != 0) {
return 1;
}
* output = data << 4;
if (get_data (* (input + 1), &data) != 0) {
return 2;
}
* output = * output | data;
return 0;
}
int main (int argc, char * argv [])
{
if (argc != 2) {
fputs ("required argument: hex\n", stderr);
return 1;
}
char * hex = argv[1];
uint16_t data = 0;
uint8_t data_length = 0;
while (*hex != '\0') {
uint8_t new_data;
if (get_data_pair (hex, &new_data) != 0) {
fprintf (stderr, "invalid hex: bad pair %.2s\n", hex);
putchar ('\n');
return 2;
}
hex += 2;
data = new_data << data_length | data;
data_length += 8;
while (data_length >= 7) {
putchar (data & 0x7f);
data = data >> 7;
data_length -= 7;
}
}
putchar ('\n');
return 0;
}
- 1. Thông báo mã hóa 7bit và 8bit có phải được giải mã trước khi xuất ra không?
- 2. Tùy chỉnh mã hóa cuộc gọi GSM
- 3. Xác định thuật toán mã hóa GSM
- 4. Cách kiểm tra loại mạng GSM GSM hoặc CDMA
- 5. Modem GSM gửi SMS
- 6. Android là SIP đến cổng GSM
- 7. Viết trình điều khiển modem GSM?
- 8. Cơ bản C# Giải mã Mime
- 9. Tìm cổng modem gsm trong C#
- 10. Mã hóa/giải mã base64
- 11. Mã hóa/giải mã RSA
- 12. Cách giải mã mã QR
- 13. Giải mã dòng lệnh PGP --- Cách giải mã tập tin?
- 14. Giải mã base64 của Django urlsafe với giải mã
- 15. giải mã (* (void (*)()) 0)()
- 16. Giải thích mã Asm
- 17. Giải mã URL Unicode
- 18. mpeg 2 giải mã
- 19. Lỗi giải mã Powershell
- 20. Giải mã canvas todataURL
- 21. Bộ giải mã Viterbi
- 22. Giải mã khung websocket
- 23. Ai đó có thể giải thích rõ hơn Bộ giải mã/Bộ giải mã không?
- 24. Giải mã/mã hóa JSON bằng VBScript
- 25. UTF-8 URL Giải mã/mã hóa
- 26. X509Xóa mã hóa/giải mã chứng nhận
- 27. Mã hóa RSA .NET Giải mã Java
- 28. Mã hóa Java RSA - Giải mã .NET
- 29. Mã hóa-giải mã trong Rails
- 30. mã hóa và giải mã chuỗi?
làm ngược lại .... –
bạn bị kẹt ở đâu – monkut