Skip to content

Commit 146052a

Browse files
authored
use uint8_t instead of char for serialized message (#161)
* use uint8_t instead of char for serialized message * fix typo * fix windows waning
1 parent 432277c commit 146052a

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

rmw/include/rmw/serialized_message.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ extern "C"
2020
{
2121
#endif
2222

23-
#include "rcutils/types/char_array.h"
23+
#include "rcutils/types/uint8_array.h"
2424

25-
// aliases for rcutils_char_array_t
25+
// aliases for rcutils_uint8_array_t
2626
/*
27-
* For now this is a simple aliasing from a serialized message to a char array.
27+
* For now this is a simple aliasing from a serialized message to a uint8 array.
2828
* However, in future developments this serialized message can become something
2929
* more complex and is therefore aliased.
3030
*/
31-
typedef rcutils_char_array_t rmw_serialized_message_t;
32-
#define rmw_get_zero_initialized_serialized_message rcutils_get_zero_initialized_char_array
33-
#define rmw_serialized_message_init rcutils_char_array_init
34-
#define rmw_serialized_message_fini rcutils_char_array_fini
35-
#define rmw_serialized_message_resize rcutils_char_array_resize
31+
typedef rcutils_uint8_array_t rmw_serialized_message_t;
32+
#define rmw_get_zero_initialized_serialized_message rcutils_get_zero_initialized_uint8_array
33+
#define rmw_serialized_message_init rcutils_uint8_array_init
34+
#define rmw_serialized_message_fini rcutils_uint8_array_fini
35+
#define rmw_serialized_message_resize rcutils_uint8_array_resize
3636

3737
#if __cplusplus
3838
}

rmw/test/test_serialized_message.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,36 @@ TEST(test_serialized_message, resize) {
3535
auto ret = rmw_serialized_message_init(&serialized_msg, 5, &allocator);
3636
ASSERT_EQ(RMW_RET_OK, ret);
3737

38-
memcpy(serialized_msg.buffer, "1234\0", 5);
38+
for (size_t i = 0; i < 5; ++i) {
39+
uint8_t c = 1u << i;
40+
memcpy(serialized_msg.buffer + i, &c, 1);
41+
}
3942
serialized_msg.buffer_length = 5;
40-
EXPECT_STREQ("1234\0", serialized_msg.buffer);
43+
for (size_t i = 0; i < serialized_msg.buffer_length; ++i) {
44+
EXPECT_EQ(1u << i, serialized_msg.buffer[i]);
45+
}
4146

4247
ret = rmw_serialized_message_resize(&serialized_msg, 11);
4348
ASSERT_EQ(RMW_RET_OK, ret);
4449
EXPECT_EQ(11u, serialized_msg.buffer_capacity);
4550
EXPECT_EQ(5u, serialized_msg.buffer_length);
4651

47-
memcpy(serialized_msg.buffer, "0987654321\0", 11);
52+
for (size_t i = 0; i < 11; ++i) {
53+
uint8_t c = 0xFF - static_cast<uint8_t>(i);
54+
memcpy(serialized_msg.buffer + i, &c, 1);
55+
}
4856
serialized_msg.buffer_length = 11;
49-
EXPECT_STREQ("0987654321\0", serialized_msg.buffer);
57+
for (size_t i = 0; i < 11; ++i) {
58+
EXPECT_EQ(0xFF - i, serialized_msg.buffer[i]);
59+
}
5060

5161
ret = rmw_serialized_message_resize(&serialized_msg, 3);
5262
ASSERT_EQ(RMW_RET_OK, ret);
5363
EXPECT_EQ(3u, serialized_msg.buffer_capacity);
5464
EXPECT_EQ(3u, serialized_msg.buffer_length);
55-
EXPECT_EQ('0', serialized_msg.buffer[0]);
56-
EXPECT_EQ('9', serialized_msg.buffer[1]);
57-
EXPECT_EQ('8', serialized_msg.buffer[2]);
65+
EXPECT_EQ(0xFF, serialized_msg.buffer[0]);
66+
EXPECT_EQ(0xFF - 1, serialized_msg.buffer[1]);
67+
EXPECT_EQ(0xFF - 2, serialized_msg.buffer[2]);
5868
// the other fields are garbage.
5969

6070
// cleanup only 3 fields

0 commit comments

Comments
 (0)