+ long int y = 0;
+ sscanf (x.c_str(), "%ld", &y);
+ return y;
+}
+
+template<>
+unsigned long
+dcp::locale_convert (string x, int, bool)
+{
+ unsigned long y = 0;
+#ifdef LIBDCP_WINDOWS
+ __mingw_sscanf (x.c_str(), "%lud", &y);
+#else
+ sscanf (x.c_str(), "%lud", &y);
+#endif
+ return y;
+}
+
+template<>
+long long
+dcp::locale_convert (string x, int, bool)
+{
+ long long y = 0;
+#ifdef LIBDCP_WINDOWS
+ __mingw_sscanf (x.c_str(), "%lld", &y);
+#else
+ sscanf (x.c_str(), "%lld", &y);
+#endif
+ return y;
+}
+
+template<>
+unsigned long long
+dcp::locale_convert (string x, int, bool)
+{
+ unsigned long long y = 0;
+#ifdef LIBDCP_WINDOWS
+ __mingw_sscanf (x.c_str(), "%llud", &y);
+#else
+ sscanf (x.c_str(), "%llud", &y);
+#endif