diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
index 7739801..e899fb9 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
@@ -102,26 +102,26 @@
   if (compaction == TEXT) {
     EncodeText(msg, p, len, textSubMode, &sb);
   } else if (compaction == BYTES) {
-    EncodeBinary(byteArr, p, byteArr.size(), BYTE_COMPACTION, &sb);
+    EncodeBinary(byteArr, p, byteArr.size(), EncodingMode::kByte, &sb);
   } else if (compaction == NUMERIC) {
     sb += kLatchToNumeric;
     EncodeNumeric(msg, p, len, &sb);
   } else {
-    int32_t encodingMode = kLatchToText;
+    EncodingMode encodingMode = EncodingMode::kUnknown;
     while (p < len) {
       size_t n = DetermineConsecutiveDigitCount(msg, p);
       if (n >= 13) {
         sb += kLatchToNumeric;
-        encodingMode = NUMERIC_COMPACTION;
+        encodingMode = EncodingMode::kNumeric;
         textSubMode = SubMode::kAlpha;
         EncodeNumeric(msg, p, n, &sb);
         p += n;
       } else {
         size_t t = DetermineConsecutiveTextCount(msg, p);
         if (t >= 5 || n == len) {
-          if (encodingMode != TEXT_COMPACTION) {
+          if (encodingMode != EncodingMode::kText) {
             sb += kLatchToText;
-            encodingMode = TEXT_COMPACTION;
+            encodingMode = EncodingMode::kText;
             textSubMode = SubMode::kAlpha;
           }
           textSubMode = EncodeText(msg, p, t, textSubMode, &sb);
@@ -137,11 +137,11 @@
           if (b_value == 0) {
             b_value = 1;
           }
-          if (b_value == 1 && encodingMode == TEXT_COMPACTION) {
-            EncodeBinary(byteArr, p, 1, TEXT_COMPACTION, &sb);
+          if (b_value == 1 && encodingMode == EncodingMode::kText) {
+            EncodeBinary(byteArr, p, 1, EncodingMode::kText, &sb);
           } else {
             EncodeBinary(byteArr, p, b_value, encodingMode, &sb);
-            encodingMode = BYTE_COMPACTION;
+            encodingMode = EncodingMode::kByte;
             textSubMode = SubMode::kAlpha;
           }
           p += b_value;
@@ -286,9 +286,9 @@
 void CBC_PDF417HighLevelEncoder::EncodeBinary(const std::vector<uint8_t>& bytes,
                                               size_t startpos,
                                               size_t count,
-                                              int32_t startmode,
+                                              EncodingMode startmode,
                                               WideString* sb) {
-  if (count == 1 && startmode == TEXT_COMPACTION)
+  if (count == 1 && startmode == EncodingMode::kText)
     *sb += kShiftToByte;
 
   size_t idx = startpos;
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
index 4706ab1..a654e4b 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
@@ -22,11 +22,9 @@
   static void Finalize();
 
  private:
-  enum class SubMode { kAlpha = 0, kLower, kMixed, kPunctuation };
+  enum class EncodingMode { kUnknown = 0, kText, kByte, kNumeric };
 
-  static constexpr int32_t TEXT_COMPACTION = 0;
-  static constexpr int32_t BYTE_COMPACTION = 1;
-  static constexpr int32_t NUMERIC_COMPACTION = 2;
+  enum class SubMode { kAlpha = 0, kLower, kMixed, kPunctuation };
 
   static SubMode EncodeText(const WideString& msg,
                             size_t startpos,
@@ -36,7 +34,7 @@
   static void EncodeBinary(const std::vector<uint8_t>& bytes,
                            size_t startpos,
                            size_t count,
-                           int32_t startmode,
+                           EncodingMode startmode,
                            WideString* sb);
   static void EncodeNumeric(const WideString& msg,
                             size_t startpos,
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
index 6a0b777..a37a8dc 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
@@ -18,23 +18,23 @@
     const char* input;
     int offset;
     int count;
-    int startmode;
+    CBC_PDF417HighLevelEncoder::EncodingMode startmode;
     const wchar_t* expected;
     int expected_length;
   } encode_binary_cases[] = {
       // Empty string encodes as empty string.
-      {"", 0, 0, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION, L"", 0},
+      {"", 0, 0, CBC_PDF417HighLevelEncoder::EncodingMode::kText, L"", 0},
 
       // Fewer than 6 characters encodes as prefix without compaction.
-      {"xxxxx", 0, 5, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION,
+      {"xxxxx", 0, 5, CBC_PDF417HighLevelEncoder::EncodingMode::kText,
        L"\x0385xxxxx", 6},
 
       // 6 charcters triggerst text encoding compaction.
-      {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION,
+      {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::EncodingMode::kText,
        L"\u039c\u00c9\u031f\u012a\u00d2\u02d0", 6},
 
       // Same result if initially in numeric compaction mode.
-      {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::NUMERIC_COMPACTION,
+      {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::EncodingMode::kNumeric,
        L"\u039c\u00c9\u031f\u012a\u00d2\u02d0", 6},
   };
 
