| // Copyright 2023 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "binary_content.h" |
| |
| #include <cstdint> |
| #include <string> |
| |
| namespace { |
| |
| uint32_t TwosComplementEncoding(int value) { |
| if (value >= 0) |
| return value; |
| uint32_t binary = -static_cast<int64_t>(value); |
| binary = ~binary; |
| ++binary; |
| return binary; |
| } |
| |
| } // namespace |
| |
| void BinaryContent::s(std::string s) { |
| for (auto c : s) { |
| data.push_back(static_cast<uint8_t>(c)); |
| } |
| } |
| |
| void BinaryContent::u1(int v) { |
| const uint32_t b = TwosComplementEncoding(v); |
| data.push_back(b & 0xffu); |
| } |
| |
| void BinaryContent::u2(int v) { |
| const uint32_t b = TwosComplementEncoding(v); |
| data.push_back((b >> 8) & 0xffu); |
| data.push_back(b & 0xffu); |
| } |
| |
| void BinaryContent::u4(int v) { |
| const uint32_t b = TwosComplementEncoding(v); |
| data.push_back((b >> 24) & 0xffu); |
| data.push_back((b >> 16) & 0xffu); |
| data.push_back((b >> 8) & 0xffu); |
| data.push_back(b & 0xffu); |
| } |