草庐IT

byte_chars

全部标签

c++ - C++0x 中 char 和 Unicode 的符号

从C++0x工作草案开始,用于处理Unicode的新字符类型(char16_t和char32_t)将是无符号的(uint_least16_tuint_least32_t将是基础类型)。但据我所知(也许不是很远)没有定义类型char8_t(基于uint_least8_t)。为什么?当您看到为UTF-8字符串文字引入了新的u8编码前缀时,它更加令人困惑......基于老friend(有符号/无符号)char.为什么?更新:有人提议添加一个新类型:char8_tchar8_t:UTF-8字符和字符串的类型(修订版1)http://www.open-std.org/jtc1/sc22/wg21

r data.table和string_elt()错误:如何修复“字符矢量” vs'char'错误?

从r3.3更新到r3.4后,我在使用时有一个错误data.table包裹:STRING_ELT()canonlybeappliedtoa'charactervector',nota'char'有人经历过吗?我正在考虑降级以“修复”此操作。这是我的会话信息:>sessionInfo()Rversion3.4.0(2017-04-21)Platform:x86_64-pc-linux-gnu(64-bit)Runningunder:Ubuntu16.04.2LTSMatrixproducts:defaultBLAS:/usr/lib/libblas/libblas.so.3.6.0LAPACK:/

c++ - 在 CUDA 内核中使用 char 变量会受到惩罚吗?

我似乎记得得到提示,我应该尽量避免在CUDA内核中使用char,因为SM喜欢32位整数。使用它们会有一些速度损失吗?比如做起来是不是比较慢inta[4];intb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]比chara[4];charb=a[0]+a[1]+a[2]+a[3];a[1]=a[3];a2[0]=a[0]在内核代码中?注意事项:我对使用char值进行算术运算、执行比较以及将它们读写到内存中的惩罚很感兴趣。 最佳答案 预先快速说明:在C/C++中,char的符号是实现定义的。当使用ch

c++ - 修改 C++ 字符串对象的底层 char 数组

我的代码是这样的:strings="abc";char*pc=const_cast(s.c_str());pc[1]='x';cout当我使用GCC编译上面的代码片段时,我得到了预期的结果"axc"。我的问题是,以这种方式修改C++字符串的底层char数组是否安全且可移植?或者可能有其他方法可以直接操作字符串的数据?仅供引用,我的目的是编写一些可以被C和C++调用的纯C函数,因此,它们只能接受char*作为参数。从char*到string,我知道涉及复制,惩罚是不利的。那么,任何人都可以提出一些建议来处理这种情况。 最佳答案 对于第

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 使程序在 "machine byte"中具有不同位数的机器之间可移植

我们都是可移植C/C++程序的爱好者。我们知道sizeof(char)或sizeof(unsignedchar)总是1“byte”。但是那个1“byte”并不意味着一个8位的字节。它只是表示一个“机器字节”,其中的位数可能因机器而异。参见thisquestion.假设您将ASCII字母“A”写入文件foo.txt。如今在任何具有8位机器字节的普通机器上,这些位将被写出:01000001但是如果您要在具有9位机器字节的机器上运行相同的代码,我想这些位会被写出:001000001更重要的是,后一种机器可以将这9位写为一个机器字节:100000000但是如果我们要在以前的机器上读取这些数据,

c++ - 是否可以从 C++ 中的模板类型获取 char* 名称

我想获取模板类型的字符串名称(constchar*)。很遗憾,我无法访问RTTI。templatestructSomeClass{constchar*GetClassName()const{return/*magicgoeshere*/;}}所以SomeClasssc;sc.GetClassName();//returns"int"这可能吗?我找不到办法,快要放弃了。感谢您的帮助。 最佳答案 不,它也不能可靠地与typeid一起工作。它将为您提供一些取决于编译器实现的内部字符串。int常见于“int”和“i”之类的东西.顺便说一句,

c++ - 如何将一系列数据从 char 数组复制到 vector 中?

我已将文件内容读入一个char数组,然后将其中的一些数据读入一个vector。如何将char数组的范围复制到vector中?vector和char数组都是同一类型(unsignedchar)。当前代码是这样的:intp=0;for(...){shortlen=(arr[p+1]我想通过使用push_back删除循环来改进这一点,怎么做? 最佳答案 可以使用insert()向vector添加内容。成员函数:vec.insert(vec.end(),arr,arr+len);当然,还有一个assign(),这可能更接近你想做的事情:ve

c++ - 为什么 `std::copy` 在我的测试程序中从 char 缓冲区读取一个 int 比 `memcpy` 慢 5 倍(!)?

这是thisquestion的后续行动我在哪里发布了这个程序:#include#include#include#include#include#include#include#include#includeclassStopwatch{public:typedefstd::chrono::high_resolution_clockClock;//!ConstructorstartsthestopwatchStopwatch():mStart(Clock::now()){}//!Returnselapsednumberofsecondsindecimalform.doubleelapse

c++ - extern const char* const SOME_CONSTANT 给我链接器错误

我想像这样在API中提供一个字符串常量:externconstchar*constSOME_CONSTANT;但是如果我在我的静态库源文件中将它定义为constchar*constSOME_CONSTANT="test";当链接到该库并使用SOME_CONSTANT时,我遇到链接器错误:Error1errorLNK2001:unresolvedexternalsymbol"charconst*constSOME_CONSTANT"(?SOME_CONSTANT@@3QBDB)从externconstchar*const声明和定义中删除指针常量(第二个const关键字)使其工作。如何使用