Explorar el Código

20211217, car_license char20 -> GBK18

huli hace 3 años
padre
commit
3da01ad566
Se han modificado 4 ficheros con 175 adiciones y 2 borrados
  1. 4 1
      dispatch/dispatch_plc.cpp
  2. 1 1
      dispatch/dispatch_plc.h
  3. 116 0
      tool/string_convert.cpp
  4. 54 0
      tool/string_convert.h

+ 4 - 1
dispatch/dispatch_plc.cpp

@@ -429,7 +429,10 @@ Error_manager Dispatch_plc::encapsulate_dispatch_request_to_plc(int outlet_id)
 		m_request_parkingspace_room_id = m_dispatch_request_msg.parkspace_info_ex(0).parkingspace_room_id();
 		//车位朝向, 小号朝前朝南, 大号朝后朝北
 		m_request_parkingspace_direction = (Common_data::Parkingspace_direction)m_dispatch_request_msg.parkspace_info_ex(0).parkingspace_direction();
-		m_request_car_license = m_dispatch_request_msg.parkspace_info_ex(0).car_info().car_numberplate();
+
+
+		//20211220, utf-8 -> GBK
+		m_request_car_license = String_convert::utf8_to_gbk( m_dispatch_request_msg.parkspace_info_ex(0).car_info().car_numberplate() );
 
 		m_request_car_type = (Common_data::Car_type)m_dispatch_request_msg.parkspace_info_ex(0).car_type();
 

+ 1 - 1
dispatch/dispatch_plc.h

@@ -17,7 +17,7 @@
 #include "../message/dispatch_message.pb.h"
 #include "../dispatch/dispatch_communication.h"
 
-
+#include "../tool/string_convert.h"
 
 //调度plc
 class Dispatch_plc

+ 116 - 0
tool/string_convert.cpp

@@ -0,0 +1,116 @@
+//
+// Created by huli on 2021/12/20.
+//
+
+#include "string_convert.h"
+
+
+String_convert::String_convert()
+{
+
+}
+
+String_convert::~String_convert()
+{
+
+}
+
+#ifdef _WIN32
+#include <windows.h>
+
+std::string String_convert::gbk_to_utf8(const char *src_str)
+{
+	int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0);
+	wchar_t* wstr = new wchar_t[len + 1];
+	memset(wstr, 0, len + 1);
+	MultiByteToWideChar(CP_ACP, 0, src_str, -1, wstr, len);
+	len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
+	char* str = new char[len + 1];
+	memset(str, 0, len + 1);
+	WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
+	std::string strTemp = str;
+	if (wstr) delete[] wstr;
+	if (str) delete[] str;
+	return strTemp;
+}
+
+std::string String_convert::utf8_to_gbk(const char *src_str)
+{
+	int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);
+	wchar_t* wszGBK = new wchar_t[len + 1];
+	memset(wszGBK, 0, len * 2 + 2);
+	MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);
+	len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
+	char* szGBK = new char[len + 1];
+	memset(szGBK, 0, len + 1);
+	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
+	std::string strTemp(szGBK);
+	if (wszGBK) delete[] wszGBK;
+	if (szGBK) delete[] szGBK;
+	return strTemp;
+}
+#else
+#include <iconv.h>
+
+int String_convert::gbk_to_utf8(char *str_str, size_t src_len, char *dst_str, size_t dst_len)
+{
+	iconv_t cd;
+	char **pin = &str_str;
+	char **pout = &dst_str;
+
+	cd = iconv_open("utf8", "gbk");
+	if (cd == 0)
+		return -1;
+	memset(dst_str, 0, dst_len);
+	if (iconv(cd, pin, &src_len, pout, &dst_len) == -1)
+		return -1;
+	iconv_close(cd);
+	**pout = '\0';
+
+	return 0;
+}
+
+int String_convert::utf8_to_gbk(char *src_str, size_t src_len, char *dst_str, size_t dst_len)
+{
+	iconv_t cd;
+	char **pin = &src_str;
+	char **pout = &dst_str;
+
+	cd = iconv_open("gbk", "utf8");
+	if (cd == 0)
+		return -1;
+	memset(dst_str, 0, dst_len);
+	if (iconv(cd, pin, &src_len, pout, &dst_len) == -1)
+		return -1;
+	iconv_close(cd);
+	**pout = '\0';
+
+	return 0;
+}
+
+std::string String_convert::gbk_to_utf8(std::string src_str)
+{
+	char* dst_str = new char[src_str.length() + 5];
+	memset(dst_str, 0, src_str.length() + 5);
+
+	std::string strTemp;
+	if ( gbk_to_utf8( (char*)src_str.c_str(), src_str.length(), dst_str, src_str.length() + 5) == 0 )
+	{
+		strTemp = dst_str;
+	}
+	return strTemp;
+}
+std::string String_convert::utf8_to_gbk(std::string src_str)
+{
+	char* dst_str = new char[src_str.length() + 5];
+	memset(dst_str, 0, src_str.length() + 5);
+
+	std::string strTemp;
+	if ( utf8_to_gbk( (char*)src_str.c_str(), src_str.length(), dst_str, src_str.length() + 5) == 0 )
+	{
+		strTemp = dst_str;
+	}
+	return strTemp;
+}
+
+#endif

+ 54 - 0
tool/string_convert.h

@@ -0,0 +1,54 @@
+//
+// Created by huli on 2021/12/20.
+//
+
+#ifndef NNXX_TESTS_STRING_CONVERT_H
+#define NNXX_TESTS_STRING_CONVERT_H
+
+#include <iostream>
+#include <string>
+#include <string.h>
+#include <stdlib.h>
+
+
+//#define _WIN32
+//using namespace std;
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <iconv.h>
+#endif
+
+class String_convert
+{
+public:
+	String_convert();
+	String_convert(const String_convert& other)= default;
+	String_convert& operator =(const String_convert& other)= default;
+	~String_convert();
+public://API functions
+
+#ifdef _WIN32
+	static std::string gbk_to_utf8(const char *src_str);
+	static std::string utf8_to_gbk(const char *src_str);
+#else
+	static int gbk_to_utf8(char *str_str, size_t src_len, char *dst_str, size_t dst_len);
+	static int utf8_to_gbk(char *src_str, size_t src_len, char *dst_str, size_t dst_len);
+	static std::string gbk_to_utf8(std::string src_str);
+	static std::string utf8_to_gbk(std::string src_str);
+#endif
+
+public://get or set member variable
+
+protected://member functions
+    
+protected://member variable 
+    
+    
+private:
+    
+};
+
+
+#endif //NNXX_TESTS_STRING_CONVERT_H