c++ - 在 C++ 中将 unsigned long 转换为 char* 的最佳方法是什么

标签 c++ unicode msvc12

我需要通过套接字发送一些unsigned long。由于 unsigned long 是 4 字节,接收方只需要 4 字节。我写的转换函数你会在下面找到,但前提是必须存储在 char 中的数字不大于 127 resp。 0x7F。对于更大的 0x7f 值,我希望根据扩展 ASCII 表 ( http://www.asciitable.com/ ) 的字符将存储在 char 中,但事实并非如此。例如,对于 0x90,什么都没有存储。我正在使用带有 Unicode 字符集的 VS12。

知道如何使转换正确吗?

void number2char(unsigned long number, char* nrAsByte){
    std::stringstream numberSS;
    numberSS << std::hex << number;
    int length = numberSS.str().length();
    length = length / 2.0 + 0.5;
    nrAsByte = new char[sizeof(number)]();
    std::fill(nrAsByte, nrAsByte + length, '\x20');
    while (length > 0){
        int lastTwo = (number & 0xff);
        number >>= 8;
        unsigned char a = lastTwo;  // this doesn't work if lastTwo > 0x7F
        std::memcpy(nrAsByte + length - 1, &a, 1);
        --length;
    }
}

我对代码感到抱歉,它没有经过我很好的测试并且包含错​​误,请不要使用它,而是按照答案中的建议

最佳答案

为什么不是这样的:

void number2char(unsigned long number, char* nrAsByte){
   unsigned char *dst= reinterpret_cast<unsigned char *> nrAsByte;
   for (int i=0; i<sizeof(unsigned long); ++i) {
      *dst++= number & 0xFF;
      number >>= 8;
   }
}

关于c++ - 在 C++ 中将 unsigned long 转换为 char* 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345592/

相关文章:

c++ - 对 std::numeric_limits<double>::digits10 的误解

c++ - 创建一个n维数的多维数组

c++ - 进行非递归制作的正确方法?

python - 在 Python 中检查 unicode 字符串是否为 NFC 的有效方法?

java - 在 JTable 中显示 Unicode 字符串

.net - UrlEncodeUnicode 和浏览器导航错误

c++ - 无法将字符串文字分配给装箱的 std::string vector

c++ - 调用 fread() c++ 时出现段错误