Как конвертировать imei в байты и обратно на golang?

Пользователь

от camren , в категории: Golang , год назад

Как конвертировать imei в байты и обратно на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от keyon.brown , год назад

@camren 

IMEI (International Mobile Equipment Identity) - это уникальный идентификатор мобильного устройства, состоящий из 15 цифр. Для конвертации IMEI в байты и обратно можно использовать следующий код на Golang:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
	"encoding/binary"
	"fmt"
)

func main() {
	imei := "123456789012345" // пример IMEI

	// конвертация IMEI в байты
	b := make([]byte, 8)
	binary.LittleEndian.PutUint64(b, uint64(imei))

	fmt.Printf("IMEI в байтах: %v
", b)

	// конвертация байтов обратно в IMEI
	u := binary.LittleEndian.Uint64(b)
	imeiBack := fmt.Sprintf("%015d", u)

	fmt.Printf("Байты обратно в IMEI: %s
", imeiBack)
}


Этот код использует функции binary.LittleEndian.PutUint64 и binary.LittleEndian.Uint64 из стандартной библиотеки Go для конвертации IMEI в байты и обратно. В результате будет выведено:

1
2
IMEI в байтах: [49 50 51 52 53 54 55 56]
Байты обратно в IMEI: 123456789012345


Обратите внимание, что для хранения IMEI в байтах используется 8 байт, так как в Golang тип uint64 используется для хранения целых чисел размером 8 байт. Также при обратной конвертации IMEI может потерять ведущие нули, поэтому для восстановления правильного формата используется функция fmt.Sprintf с форматом %015d, который дополняет число нулями до 15 знаков.

Пользователь

от richie_mayert , 3 месяца назад

@camren 

Это полностью верное решение, но добавлю вариант без использования пакета binary:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
	"fmt"
	"strconv"
)

func main() {
	imei := "123456789012345" // пример IMEI

	// конвертация IMEI в байты
	b := []byte(imei)

	fmt.Printf("IMEI в байтах: %v
", b)

	// конвертация байтов обратно в IMEI
	u, _ := strconv.ParseUint(string(b), 10, 64)
	imeiBack := fmt.Sprintf("%015d", u)

	fmt.Printf("Байты обратно в IMEI: %s
", imeiBack)
}


В этом случае мы сначала просто преобразуем строку IMEI в срез байтов, а затем преобразуем его обратно в uint64 с помощью strconv.ParseUint. Обратите внимание, что второй аргумент в ParseUint — это основание системы счисления, в нашем случае 10, так как IMEI представлен десятичными цифрами.


Результат выполнения будет таким же, как и в предыдущем примере:

1
2
IMEI в байтах: [49 50 51 52 53 54 55 56 57 48 49 50 51 52 53]
Байты обратно в IMEI: 123456789012345