标签: wchar-t

wchar_t数据是否需要字节序转换?

在C/C++中,如果一个多字节宽字符(wchar_t)值从big-endian系统传输到little-endian系统(反之亦然),它会在另一端出现相同的值吗?或者需要交换字节?

c c++ data-transfer wchar-t endianness

7
推荐指数
2
解决办法
3416
查看次数

是否有asprintf的wchar_t版本?

我需要一个C函数,它返回格式化字符串的最终长度,这样我就可以正确地分配目标字符串,而不是自己计算长度.snprintf由于无法编写整个字符串,这就是其中的一个,但不幸的是,它没有广泛的字符替代品.

swprintf 如果出现错误则返回-1,而不是所需的长度(为什么不是相同的行为?!?)

提到的标题asprintf似乎也没有帮助,因为它只提供非宽版本.

_vscwprintf 可以在Windows上使用,但我需要一个跨平台,标准版本或至少一个Linux版本,我将#ifdef代码.

有任何想法吗?谢谢!

c printf wchar-t

7
推荐指数
1
解决办法
1784
查看次数

char vs wchar_t

我正在尝试打印出一个wchar_t*字符串.代码如下:

#include <stdio.h>
#include <string.h>
#include <wchar.h>

char *ascii_ = "????";  //line-1
wchar_t *wchar_ = L"????";  //line-2

int main()
{
    printf("ascii_: %s\n", ascii_);  //line-3
    wprintf(L"wchar_: %s\n", wchar_);  //line-4
    return 0;
}

//Output
ascii_: ????
Run Code Online (Sandbox Code Playgroud)

题:

  1. 显然我不应该将CJK字符分配给第1行中的char*指针,但我只是这样做了,第3行的输出是正确的,为什么呢?第3行中的printf()怎么能给我非ascii字符?它以某种方式知道编码吗?

  2. 我假设第2行和第4行的代码是正确的,但为什么我没有获得第4行的任何输出?

c encoding wchar-t

7
推荐指数
2
解决办法
7267
查看次数

为什么char既没有签名也没有签名,但wchar_t是?

以下C++程序编译时没有错误:

void f(char){}
void f(signed char){}
void f(unsigned char){}
int main(){}  
Run Code Online (Sandbox Code Playgroud)

wchar_t同一程序的版本不是:

void f(wchar_t){}
void f(signed wchar_t){}
void f(unsigned wchar_t){}
int main(){}
Run Code Online (Sandbox Code Playgroud)

错误:重新定义'void f(wchar_t)'
void f(签名的wchar_t){}

似乎wchar_t就是这样unsigned.
为什么重载不一致?

c++ overloading wchar-t implicit-conversion

7
推荐指数
1
解决办法
975
查看次数

在`fwprintf'之后使用`fprintf'时无输出

这只是在我测试我分离的更大程序的一部分时发生的.原始函数将以我需要的特殊方式从字符串中删除非ascii字符,就是这个程序

#include <stdio.h>
#include <wchar.h>

int main(int argc, char *argv[])
{
    fwprintf(stdout, L"-- Example\n");
    fprintf(stdout, "-- Example\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不会-- Example在我的linux(Fedora 22)系统上打印第二个.虽然fwprintf()再次使用或fprintf(stderr, "-- Example\n");将工作.

  • 这是预期的行为吗?为什么?

c linux printf wchar-t stdio

7
推荐指数
1
解决办法
139
查看次数

比较2个wchar_t数组

我确信这很简单,但是我来自ac #background,字符串很简单,现在我正在进入一个非常难以管理的世界.

基本上我使用EnumDisplayDevices列出可用的设备,我想针对特定的适配器,所以我需要将DeviceString和DeviceName与一些已知的值进行比较,以查看我是否有合适的适配器来处理.

但我很难过,我把已知的价值定义为......

wchar_t devName[] = L"Intel(R) HD Graphics Family";
Run Code Online (Sandbox Code Playgroud)

但直接比较不起作用 - if(devName == theDisplay.DeviceName)

strcmp 似乎没有广泛的角色,所以我不知道该怎么办,有人知道怎么做这个吗?

谢谢

c++ string wchar-t

6
推荐指数
2
解决办法
6769
查看次数

我如何将 const wchar_t* 转换为 System::String?

我需要将我的 SHA1 (wchar_t*) 转换为普通的 String^ 以便在某个函数中使用它。有任何想法吗?我试过谷歌,但所有的结果都与我的问题完全相反。:\

注意:我正在使用 C++.NET 框架和 Windows 窗体应用程序

.net string c++-cli wchar-t

6
推荐指数
1
解决办法
1万
查看次数

哪个方法对于初始化wchar_t字符串是正确的?

我正在编写一个程序,我需要初始化一个保存文本的消息缓冲区.我能够使它工作,但我在下面用C语言初始化字符串的各种方式编写,我想了解其中的区别.另外,哪种方法最适合初始化wchar_t/char字符串?

方法一:

wchar_t message[100];
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这将分配一个200字节的内存空间(我认为wchar_t的大小是Windows操作系统上的2字节).此内存分配是静态的,并且在编译时将在可执行文件的.data部分内分配.

message也是一个内存地址本身,指向字符串的第一个字符.

这种初始化字符串的方法对我有用.

方法二:

wchar_t *message;
message=(wchar_t *) malloc(sizeof(wchar_t) * 100);
Run Code Online (Sandbox Code Playgroud)

此方法首先将变量消息初始化为指向wchar_t的指针.它是一个广泛的字符数组.

接下来,它将为此字符串动态分配内存.我想我已经正确地编写了它的语法.

当我在我的程序中使用此方法时,它不会读取字符串中的空格后的文本.

Example text: "This is a message"
Run Code Online (Sandbox Code Playgroud)

它只会将"This"读入变量消息,之后不会显示任何文本.

方法三:

wchar_t *message[100];
Run Code Online (Sandbox Code Playgroud)

这将消息定义为包含100个宽字符的数组和指向wchar_t的指针.这种初始化消息的方法很有效.但是,我不确定这是不是正确的方法.因为消息本身指向字符串中的第一个字符.所以,用尺寸初始化它是否正确?

我想更深入地理解它,初始化字符串的正确方法.同样的概念也可以扩展为一串字符.

c arrays wchar-t string-literals

6
推荐指数
2
解决办法
3万
查看次数

Unicode字符的小写

我正在开发一个C++需要从中获取数据的项目unicode text.我有一个问题,我不能降低一些unicode character.我wchar_t用来存储从unicode文件读取的unicode字符.之后,我_wcslwr用来降低wchar_t字符串.还有很多案例还不低如:

? Â ? Ê Ô ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Run Code Online (Sandbox Code Playgroud)

哪个小写是:

? â ? ê ô ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
Run Code Online (Sandbox Code Playgroud)

我试过tolower,它仍然无法正常工作.

c++ unicode wchar-t latin

6
推荐指数
1
解决办法
2148
查看次数

设置UTF-8语言环境后使用fgetws?

GCC 4.8,5.1,6.2和3.8.1锵在Ubuntu 16.10使用-std=c11,-std=c++11,-std=c++14,和-std=c++17都表现出使用时,这种怪异的行为fgetws(buf, (int) bufsize, stdin)setlocale(LC_ALL, "any_THING.utf8");.

示例程序:

#include <locale.h>
#include <wchar.h>
#include <stdlib.h>
#include <stdio.h>

int main(const int argc, const char* const * const argv) {
  (void) argc;

  setlocale(LC_ALL, argv[1]);

  const size_t len = 3;

  wchar_t *buf = (wchar_t *) malloc(sizeof (wchar_t) * len),
         *stat = fgetws(buf, (int) len, stdin);

  wprintf(L"[%ls], [%ls]\n", stat, buf);

  free(buf);

  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

Casting malloc仅适用于C++ - compat.

像这样编译:cc -std=c11 fg.c …

c glibc wchar-t wchar setlocale

6
推荐指数
1
解决办法
298
查看次数