diff --git a/ebpfcat/ethercat.py b/ebpfcat/ethercat.py
index 5c37a19e4a5e4dd295d1d0f3ed236c965fc77f61..c50c42855b49937ba1bf3547e15652f0e1d4c510 100644
--- a/ebpfcat/ethercat.py
+++ b/ebpfcat/ethercat.py
@@ -116,7 +116,7 @@ class ObjectEntry:
         if self.dataType in (ECDataType.VISIBLE_STRING,
                              ECDataType.UNICODE_STRING):
             return ret.decode("utf8")
-        elif self.dataType.fmt is None:
+        elif isinstance(self.dataType, int) or self.dataType.fmt is None:
             return ret
         else:
             return unpack("<" + self.dataType.fmt, ret)[0]
@@ -125,7 +125,7 @@ class ObjectEntry:
         if self.dataType in (ECDataType.VISIBLE_STRING,
                              ECDataType.UNICODE_STRING):
             d = data.encode("utf8")
-        elif self.dataType.fmt is None:
+        elif isinstance(self.dataType, int) or self.dataType.fmt is None:
             d = data
         else:
             d = pack("<" + self.dataType.fmt, data)
@@ -569,9 +569,9 @@ class Terminal:
     async def sdo_write(self, data, index, subindex=None):
         if len(data) <= 4 and subindex is not None:
             await self.mbx_send(
-                    MBXType.COE, "HBHB", CoECmd.SDOREQ.value << 12,
-                    ODCmd.DOWN_EXP.value | ((4 - len(data)) << 2),
-                    index, subindex, data=data)
+                    MBXType.COE, "HBHB4s", CoECmd.SDOREQ.value << 12,
+                    ODCmd.DOWN_EXP.value | (((4 - len(data)) << 2) & 0xc),
+                    index, subindex, data)
             type, data = await self.mbx_recv()
             if type is not MBXType.COE:
                 raise RuntimeError(f"expected CoE, got {type}")