我正在尝试将一些VS 2015 C ++代码转换为Android Studio C ++代码。
我的功能如下:
#This example uses three types, of which we only want 2
mycol = c("#A38FCC","#8f9e00","#7F40FF")
myname = c("random_line1","random_line2","random_line3")
set.seed(123)
df=data.frame(month = rep(month.abb,3),
mpft = c(rep(1,12),rep(2,12),rep(3,12)),
ran = runif(36,0.,10.))
#this creates a dataframe that maps mpft to it's name and hex code
details <- data.frame(mpft = 1:length(mycol),
mycol=(mycol),
myname= myname,
stringsAsFactors = FALSE)
#merge the two data frames
df2 <- df %>% left_join(., details, by="mpft")
#We experiment to see if the colour scheme is maintained by removing one of the types
df3 <- df2 %>% filter(mpft !=2)
#Arrange the newly formed dataframe in order of mpft, although it makes no difference in this example it is crucial if the observatiions of mpft are not in numerical order.
df3 <- df3 %>% arrange(mpft)
#Colours wrong!
df2%>% ggplot(.,aes(x=month,y=ran, colour= myname)) +
geom_line(aes(group = mpft)) +
scale_color_manual(guide = guide_legend(title = "Legend"),
values = unique(df2$mycol) )
#Colours Correct!
df3%>% ggplot(.,aes(x=month,y=ran, colour= myname)) +
geom_line(aes(group = mpft)) +
scale_color_manual(guide = guide_legend(title = "Legend"),
values = unique(df3$mycol) )
我想摆脱WCHAR和wchar_t,以便更轻松地移植。
有人建议替换这些吗? 我想避免告诉Android Studio wchar_t是什么,如果可能的话。
谢谢。
编辑:
以下是班级信息:
int size = 0;
int len = 0;
fread(&size,sizeof(int),1,g_File);
#ifdef VERBOSE
printf("fullSentences size = %d\n",size);
#endif
int i1 = 0;
int i2 = 0;
int i3 = 0;
for(int i = 0; i < size; i++)
{
fread(&len,sizeof(int),1,g_File);
wchar_t *buff = new WCHAR[len+1];
fread(buff,sizeof(WCHAR),len,g_File);
buff[len]=0;
fread(&i1,sizeof(int),1,g_File);
fread(&i2,sizeof(int),1,g_File);
fread(&i3,sizeof(int),1,g_File);
fullSentences.Add(buff,i1,i2,i3);
delete buff;
#ifdef VERBOSE
FullSentence fs = fullSentences.Content().back();
printf("%s\t%d\t%d\n",fs.Text.c_str(),fs.ByteStart,fs.ByteCount);
#endif
}
答案 0 :(得分:1)
如果您希望此代码在Windows和Android版本上运行,那么您会发现在Windows上wchar_t是2个字节,而在android it is 4bytes上。所以你将无法在Windows上编写文件,以后在android上正确阅读。在这种情况下,你必须在android上使用char16_t并将其转换为'你的 选择android下的'string type。
(编辑:更好,如果可以的话 - 确保所有文件都写成utf8字符串)
至于'选择字符串类型'我建议使用utf8,因此使用std :: string(使用utf8编码)代替std :: wstring。根据我的经验,NDK团队不鼓励从最开始使用wchar_t(缺少来自c库等的w *函数)。我不确定它现在是怎样的。
我在一个最初使用MFC编码的项目上工作,然后移植到android。我们从一开始就使用了TCHAR宏。您知道哪个解析为非unicode构建的char和unicode构建的wchar_t。因此,想法是使用TCHAR,然后在Android TCHAR下解析为char,而在Windows上使用wchar_t(我假设你在windows下使用unicode构建?)。
我不是说这是在windows和android平台之间共享代码的最佳解决方案,有许多问题,比如在android上转换为utf8,这些都是用if-defs完成的。
答案 1 :(得分:1)
使用包含UTF-8编码文本的std::string
。您可能还需要一些lightweight library来帮助处理此类文本的检查和转换。避免在可移植的代码中使用wchar_t
和std::wstring
。