gpt4 book ai didi

c++ - 从 wchar_t 转换为 char,反之亦然

转载 作者:行者123 更新时间:2023-11-28 03:00:40 24 4
gpt4 key购买 nike

我正在编写一个模板类 String(仅用于学习目的)并且有一个小问题。如果 T 是 wchar_t 而 U 是 char,反之亦然,我缺少什么才能使此方法起作用?

template<typename U>
String<T> operator + (const U* other)
{
String<T> newString;
uint32_t otherLength = length(other);
uint32_t stringLength = m_length + otherLength;
uint32_t totalLength = stringLength * sizeof(T) + sizeof(T);

T *buffer = new T[totalLength];

memset(buffer, 0, totalLength);
memcpy(buffer, m_value, m_length * sizeof(T));
newString.m_value = buffer;
newString.m_length = stringLength;
memcpy(newString.m_value + m_length, other, otherLength * sizeof(T));

return newString;
}

好吧,下面的 Jared 提出了一个解决方案,所以像这样(有错误,我知道,只是一个模板)?

template<typename U>
String<T> operator + (const U* other)
{
String<T> newString;

uint32_t sizeOfT = sizeof(T); // wchar_t is 4
uint32_t sizeOfU = sizeof(U); // char is 1

T* convertedString;

int i = 0;
while (*other != 0)
{
convertedString[i] = ConvertChar(*other);
other++;
i++;
}

return newString;
}

template <typename U>
T ConvertChar(U character)
{

}

最佳答案

现在,当从 U* 转换时,您的代码实质上是在使用内存拷贝至 String<T> .不幸的是,这行不通,因为 wchar_tchar有不同的内存布局。特别是 wchar_t char 通常占用 2 个字节是单byte .你需要在这里建立一个适当的转换函数,它应该应用于字符串中的每一项

T ConvertChar(U c) { ... }

关于c++ - 从 wchar_t 转换为 char,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20936222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com