diff --git a/endian.hpp b/endian.hpp
new file mode 100644
index 0000000..3c0c622
--- /dev/null
+++ b/endian.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <endian.h>
+#include <stdint.h>
+
+namespace endian
+{
+namespace details
+{
+template <typename T>
+struct convert
+{
+    static T to_ipmi(T) = delete;
+    static T from_ipmi(T) = delete;
+    static T to_network(T) = delete;
+    static T from_network(T) = delete;
+};
+
+template<> struct convert<uint16_t>
+{
+    static uint16_t to_ipmi(uint16_t i) { return htole16(i); };
+    static uint16_t from_ipmi(uint16_t i) { return le16toh(i); };
+    static uint16_t to_network(uint16_t i) { return htobe16(i); };
+    static uint16_t from_network(uint16_t i) { return be16toh(i); };
+};
+
+template<> struct convert<uint32_t>
+{
+    static uint32_t to_ipmi(uint32_t i) { return htole32(i); };
+    static uint32_t from_ipmi(uint32_t i) { return le32toh(i); };
+    static uint32_t to_network(uint32_t i) { return htobe32(i); };
+    static uint32_t from_network(uint32_t i) { return be32toh(i); };
+};
+}
+
+template<typename T> T to_ipmi(T i)
+{
+    return details::convert<T>::to_ipmi(i);
+}
+
+template<typename T> T from_ipmi(T i)
+{
+    return details::convert<T>::from_ipmi(i);
+}
+
+template<typename T> T to_network(T i)
+{
+    return details::convert<T>::to_network(i);
+}
+template<typename T> T from_network(T i)
+{
+    return details::convert<T>::from_network(i);
+}
+}
