diff --git a/src/tools/windows/converter/ms_symbol_server_converter.cc b/src/tools/windows/converter/ms_symbol_server_converter.cc
index e3215ba..4b0dcf6 100644
--- a/src/tools/windows/converter/ms_symbol_server_converter.cc
+++ b/src/tools/windows/converter/ms_symbol_server_converter.cc
@@ -154,7 +154,7 @@
     if (!Cleanup()) {
       // Print the error message here, because destructors have no return
       // value.
-      fprintf(stderr, "~AutoSymSrv: SymCleanup: error %d\n", GetLastError());
+      fprintf(stderr, "~AutoSymSrv: SymCleanup: error %lu\n", GetLastError());
     }
   }
 
@@ -238,7 +238,7 @@
   if (!symsrv.Initialize(process,
                          const_cast<char *>(symbol_path_.c_str()),
                          false)) {
-    fprintf(stderr, "LocateFile: SymInitialize: error %d for %s %s %s\n",
+    fprintf(stderr, "LocateFile: SymInitialize: error %lu for %s %s %s\n",
             GetLastError(),
             debug_or_code_file.c_str(),
             debug_or_code_id.c_str(),
@@ -249,7 +249,7 @@
   if (!SymRegisterCallback64(process, SymCallback,
                              reinterpret_cast<ULONG64>(this))) {
     fprintf(stderr,
-            "LocateFile: SymRegisterCallback64: error %d for %s %s %s\n",
+            "LocateFile: SymRegisterCallback64: error %lu for %s %s %s\n",
             GetLastError(),
             debug_or_code_file.c_str(),
             debug_or_code_id.c_str(),
@@ -304,7 +304,7 @@
     }
 
     fprintf(stderr,
-            "LocateFile: SymFindFileInPath: error %d for %s %s %s\n",
+            "LocateFile: SymFindFileInPath: error %lu for %s %s %s\n",
             error,
             debug_or_code_file.c_str(),
             debug_or_code_id.c_str(),
@@ -322,7 +322,7 @@
   // Do the cleanup here even though it will happen when symsrv goes out of
   // scope, to allow it to influence the return value.
   if (!symsrv.Cleanup()) {
-    fprintf(stderr, "LocateFile: SymCleanup: error %d for %s %s %s\n",
+    fprintf(stderr, "LocateFile: SymCleanup: error %lu for %s %s %s\n",
             GetLastError(),
             debug_or_code_file.c_str(),
             debug_or_code_id.c_str(),
@@ -405,7 +405,8 @@
       };
 
       for (int desc_action_index = 0;
-           desc_action_index < sizeof(desc_actions) / sizeof(desc_action);
+           desc_action_index <
+           static_cast<int>(sizeof(desc_actions) / sizeof(desc_action));
            ++desc_action_index) {
         if (desc.find(desc_actions[desc_action_index].desc) != string::npos) {
           *(desc_actions[desc_action_index].action) = true;
diff --git a/src/tools/windows/converter_exe/converter.cc b/src/tools/windows/converter_exe/converter.cc
index df87c7b..5b70903 100644
--- a/src/tools/windows/converter_exe/converter.cc
+++ b/src/tools/windows/converter_exe/converter.cc
@@ -66,8 +66,6 @@
 const char *kLocalCachePath = "c:\\symbols";
 const char *kNoExeMSSSServer = "http://msdl.microsoft.com/download/symbols/";
 
-const int kMatchArrSize = 64;
-
 // Windows stdio doesn't do line buffering.  Use this function to flush after
 // writing to stdout and stderr so that a log will be available if the
 // converter crashes.
@@ -81,7 +79,7 @@
 }
 
 static string CurrentDateAndTime() {
-  const string kUnknownDateAndTime = "????-??-?? ??:??:??";
+  const string kUnknownDateAndTime = R"(????-??-?? ??:??:??)";
 
   time_t current_time;
   time(&current_time);
diff --git a/src/tools/windows/converter_exe/escaping.cc b/src/tools/windows/converter_exe/escaping.cc
index e26bbeb..74a7203 100644
--- a/src/tools/windows/converter_exe/escaping.cc
+++ b/src/tools/windows/converter_exe/escaping.cc
@@ -259,10 +259,10 @@
       // szsrc claims the string is).
 
       if (!src[0] || !src[1] || !src[2] ||
-          (temp = ((unbase64[src[0]] << 18) |
-                   (unbase64[src[1]] << 12) |
-                   (unbase64[src[2]] << 6) |
-                   (unbase64[src[3]]))) & 0x80000000) {
+          (temp = ((unbase64[static_cast<int>(src[0])] << 18) |
+                   (unbase64[static_cast<int>(src[1])] << 12) |
+                   (unbase64[static_cast<int>(src[2])] << 6) |
+                   (unbase64[static_cast<int>(src[3])]))) & 0x80000000) {
         // Iff any of those four characters was bad (null, illegal,
         // whitespace, padding), then temp's high bit will be set
         // (because unbase64[] is -1 for all bad characters).
@@ -301,10 +301,10 @@
   } else {
     while (szsrc >= 4)  {
       if (!src[0] || !src[1] || !src[2] ||
-          (temp = ((unbase64[src[0]] << 18) |
-                   (unbase64[src[1]] << 12) |
-                   (unbase64[src[2]] << 6) |
-                   (unbase64[src[3]]))) & 0x80000000) {
+          (temp = ((unbase64[static_cast<int>(src[0])] << 18) |
+                   (unbase64[static_cast<int>(src[1])] << 12) |
+                   (unbase64[static_cast<int>(src[2])] << 6) |
+                   (unbase64[static_cast<int>(src[3])]))) & 0x80000000) {
         GET_INPUT(first_no_dest, 4);
         GET_INPUT(second_no_dest, 3);
         GET_INPUT(third_no_dest, 2);
diff --git a/src/tools/windows/converter_exe/http_download.cc b/src/tools/windows/converter_exe/http_download.cc
index b037662..5afc1cc 100644
--- a/src/tools/windows/converter_exe/http_download.cc
+++ b/src/tools/windows/converter_exe/http_download.cc
@@ -170,7 +170,7 @@
                              sizeof(path)/sizeof(path[0]),
                              &port)) {
     fprintf(stderr,
-            "HTTPDownload::Download: InternetCrackUrl: error %d for %ws\n",
+            "HTTPDownload::Download: InternetCrackUrl: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
@@ -192,7 +192,7 @@
                          NULL,  // proxy bypass
                          internet.get_handle_addr())) {
     fprintf(stderr,
-            "HTTPDownload::Download: Open: error %d for %ws\n",
+            "HTTPDownload::Download: Open: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
@@ -203,7 +203,7 @@
                             port,
                             connection.get_handle_addr())) {
     fprintf(stderr,
-            "HTTPDownload::Download: InternetConnect: error %d for %ws\n",
+            "HTTPDownload::Download: InternetConnect: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
@@ -239,21 +239,21 @@
                                 secure,
                                 request.get_handle_addr())) {
     fprintf(stderr,
-            "HttpClient::OpenRequest: error %d for %ws, request: %ws\n",
+            "HttpClient::OpenRequest: error %lu for %ws, request: %ws\n",
             GetLastError(), url.c_str(), request_string.c_str());
     return false;
   }
 
   if (!http_client->SendRequest(request.get(), NULL, 0)) {
     fprintf(stderr,
-            "HttpClient::SendRequest: error %d for %ws\n",
+            "HttpClient::SendRequest: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
 
   if (!http_client->ReceiveResponse(request.get())) {
     fprintf(stderr,
-            "HttpClient::ReceiveResponse: error %d for %ws\n",
+            "HttpClient::ReceiveResponse: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
@@ -261,7 +261,7 @@
   int http_status = 0;
   if (!http_client->GetHttpStatusCode(request.get(), &http_status)) {
     fprintf(stderr,
-            "HttpClient::GetHttpStatusCode: error %d for %ws\n",
+            "HttpClient::GetHttpStatusCode: error %lu for %ws\n",
             GetLastError(), url.c_str());
     return false;
   }
@@ -304,13 +304,13 @@
 
     if (!read_result) {
       fprintf(stderr,
-              "HttpClient::ReadData: error %d for %ws\n",
+              "HttpClient::ReadData: error %lu for %ws\n",
               GetLastError(),
               url.c_str());
       return false;
     } else if (size_read != 0) {
       fprintf(stderr,
-              "HttpClient::ReadData: error %d/%d for %ws\n",
+              "HttpClient::ReadData: error %lu/%lu for %ws\n",
               total_read,
               content_length,
               url.c_str());
