xref: /aosp_15_r20/external/ot-br-posix/src/utils/hex.hpp (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
1 /*
2  *  Copyright (c) 2017, The OpenThread Authors.
3  *  All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions are met:
7  *  1. Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  *  2. Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *  3. Neither the name of the copyright holder nor the
13  *     names of its contributors may be used to endorse or promote products
14  *     derived from this software without specific prior written permission.
15  *
16  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  *  POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /**
30  * @file
31  *   This file provides kinds of convertion functions.
32  */
33 
34 #ifndef OTBR_UTILS_HEX_HPP_
35 #define OTBR_UTILS_HEX_HPP_
36 
37 #include "openthread-br/config.h"
38 
39 #include <string>
40 
41 #include <stddef.h>
42 #include <stdint.h>
43 
44 namespace otbr {
45 
46 namespace Utils {
47 
48 /**
49  * @brief Converts a hexadecimal string to a byte array.
50  *
51  * @param hexString A pointer to the hexadecimal string to be converted.
52  * @param bytes A pointer to an array to store the resulting byte values.
53  * @param maxBytesLength The maximum number of bytes that can be stored in the `bytes` array.
54  *
55  * @return The number of bytes stored in the `bytes` array, or -1 if an error occurred.
56  */
57 int Hex2Bytes(const char *aHex, uint8_t *aBytes, uint16_t aBytesLength);
58 
59 /**
60  * @brief Converts a byte array to a hexadecimal string.
61  *
62  * @param[in]  aBytes A pointer to the byte array to be converted.
63  * @param[in]  aBytesLength The length of the byte array.
64  * @param[out] aHex A character array to store the resulting hexadecimal string.
65  *                  Must be at least 2 * @param aBytesLength + 1 long.
66  *
67  * @return The length of the resulting hexadecimal string.
68  */
69 size_t Bytes2Hex(const uint8_t *aBytes, const uint16_t aBytesLength, char *aHex);
70 
71 /**
72  * @brief Converts a byte array to a hexadecimal string.
73  *
74  * @param[in]  aBytes A pointer to the byte array to be converted.
75  * @param[in]  aBytesLength The length of the byte array.
76  *
77  * @return The hexadecimal string.
78  */
79 std::string Bytes2Hex(const uint8_t *aBytes, const uint16_t aBytesLength);
80 
81 /**
82  * @brief Converts a 64-bit integer to a hexadecimal string.
83  *
84  * @param[in]  aLong The 64-bit integer to be converted.
85  * @param[out] aHex A character array to store the resulting hexadecimal string.
86  *                  Must be at least 17 bytes long.
87  *
88  * @return The length of the resulting hexadecimal string.
89  */
90 size_t Long2Hex(const uint64_t aLong, char *aHex);
91 
92 } // namespace Utils
93 
94 } // namespace otbr
95 
96 #endif // OTBR_UTILS_HEX_
97