mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Classs for binary message encoding/decoding that matches the ones in the Flutter services library.
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "flutter/shell/platform/linux/testing/fl_test.h"
|
|
|
|
static uint8_t hex_digit_to_int(char value) {
|
|
if (value >= '0' && value <= '9')
|
|
return value - '0';
|
|
else if (value >= 'a' && value <= 'f')
|
|
return value - 'a' + 10;
|
|
else if (value >= 'F' && value <= 'F')
|
|
return value - 'A' + 10;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
static uint8_t parse_hex8(const gchar* hex_string) {
|
|
if (hex_string[0] == '\0')
|
|
return 0x00;
|
|
return hex_digit_to_int(hex_string[0]) << 4 | hex_digit_to_int(hex_string[1]);
|
|
}
|
|
|
|
GBytes* hex_string_to_bytes(const gchar* hex_string) {
|
|
GByteArray* buffer = g_byte_array_new();
|
|
for (int i = 0; hex_string[i] != '\0' && hex_string[i + 1] != '\0'; i += 2) {
|
|
uint8_t value = parse_hex8(hex_string + i);
|
|
g_byte_array_append(buffer, &value, 1);
|
|
}
|
|
return g_byte_array_free_to_bytes(buffer);
|
|
}
|
|
|
|
gchar* bytes_to_hex_string(GBytes* bytes) {
|
|
GString* hex_string = g_string_new("");
|
|
size_t data_length;
|
|
const uint8_t* data =
|
|
static_cast<const uint8_t*>(g_bytes_get_data(bytes, &data_length));
|
|
for (size_t i = 0; i < data_length; i++)
|
|
g_string_append_printf(hex_string, "%02x", data[i]);
|
|
return g_string_free(hex_string, FALSE);
|
|
}
|