如何从具有 null(0) 字符的 char 数组创建 C++ istringstream?

2024-01-27

我有一个 char 数组,其中随机位置包含空字符。我尝试使用此数组(encodedData_arr)创建一个 iStringStream,如下所示,

我使用此 iStringStream 将二进制数据(Iplimage 的 imagedata)插入到 MySQL 数据库 blob 字段(使用 MySQL Connector/C++ 的 setBlob(istream *is) ),它仅存储第一个空字符之前的字符。

有没有办法使用带有空字符的 char 数组创建 iStringStream?

unsigned char *encodedData_arr = new unsigned char[data_vector_uchar->size()];
// Assign the data of vector<unsigned char> to the encodedData_arr
for (int i = 0; i < vec_size; ++i)
{
 cout<< data_vector_uchar->at(i)<< " : "<< encodedData_arr[i]<<endl;
}

// Here the content of the encodedData_arr is same as the data_vector_uchar
// So char array is initializing fine.
istream *is = new istringstream((char*)encodedData_arr, istringstream::in || istringstream::binary);

prepStmt_insertImage->setBlob(1, is);
// Here only part of the data is stored in the database blob field (Upto the first null character)

字符串中的空字符没有什么特别之处

std::istringstream iss(std::string(data, N));
setBlob(&iss);

当然如果你这样做

std::istringstream iss("haha a null: \0");

它将解释为转换为的 C 风格字符串std::string,因此将停在\0,不将其视为真正的内容字节。讲述std::string大小明确允许它使用任何空字节作为真实内容数据。

如果想直接读取char数组,可以使用strstream

std::istrstream iss(data, N);

这将直接从提供的数据中读取data, up to N bytes. strstream已被正式声明为“已弃用”,但它仍将出现在 C++0x 中,因此您可以使用它。或者您创建自己的streambuf,如果你确实需要读取原始数据char*像那样。

struct myrawr : std::streambuf {
  myrawr(char const *s, size_t n) { 
    setg(const_cast<char*>(s), 
         const_cast<char*>(s), 
         const_cast<char*>(s + n));
  }
};

struct hasb { 
  hasb(char const *s, size_t n)
   :m(s, n)
  { }
  myrawr m;
};

// using base-from-member idiom
struct myrawrs : private hasb, std::istream {
  myrawrs(char const *s, size_t n)
    :hasb(s, n), 
     std::istream(&static_cast<hasb*>(this)->m)
  { }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从具有 null(0) 字符的 char 数组创建 C++ istringstream? 的相关文章

随机推荐

  • 相当于“evalin”,不需要输出参数(内部)

    背景 我正在阅读有关访问隐藏函数的内容 并开始使用builtin 我写了一个小函数 function klear x go to parent environment evalin base builtin clear x end 这会引发
  • 如何在 Android 适配器中反转使用 FirebaseUI- 获取的数据?

    我尝试使用FirebaseUI 实时数据库Android lib 使用 recycler view 适配器简单地在 viepager2 中显示数据集 当我获取数据时 我首先获取最旧的数据 并且我需要先显示最新的数据 所以我需要一个相反的顺序
  • 如何从JSP输出HTML <%! ... %> 阻止?

    刚开始学习JSP技术 遇到了瓶颈 如何从 JSP 声明块 这不起作用 服务器说没有 out U 我确实知道如何使用返回字符串的方法重写代码 但是有没有办法在 尽管它可能不是最佳的 但它仍然很有趣 您不能在指令内使用 out 变量 也不能使用
  • shell 脚本的 Groovy 参数

    我一直在尝试将我的代码分成两个不同的文件 callTheFunction groovy and theFunction groovy 从文件名可以看出 callTheFunction groovy调用中定义的函数theFunction gr
  • PostgreSQL 数据库静态加密

    如何加密静态 PostgreSQL 数据库 我找不到关于如何实现这一目标的良好文档 威胁模型在这种情况下非常重要 因为有效地加密数据库并不是一件容易的任务 这可以在 3 个不同的层完成 客户端应用程序 存储设备 数据库本身 请注意 在所有情
  • 迭代 Node.js 中的对象键

    从 Javascript 1 7 开始 有一个Iterator https developer mozilla org en New in JavaScript 1 7 Iterators对象 它允许 var a a 1 b 2 c 3 v
  • MySQL - 选择然后更新

    我有一个用 PHP 编写的脚本 其中有这一行可以正常工作以选择我需要的数据 result mysql query SELECT product name sku qty FROM supplier dropship items WHERE
  • iOS 屏幕截图部分

    我有一个应用程序使用以下代码截取 UIImageView 的屏幕截图 IBAction screenShot id sender UIGraphicsBeginImageContext sshot frame size self view
  • 等待池线程完成

    我很抱歉问了一个多余的问题 然而 我找到了许多解决我的问题的方法 但没有一个得到很好的解释 我希望在这里能说清楚 我的 C 应用程序的主线程使用线程池生成 1 n 个后台工作人员 我希望原始线程锁定 直到所有工作人员完成为止 我特别研究了
  • 两部分正态(或分裂正态)分布的密度

    两部分正态分布是否存在密度函数 在克兰上 我想在编写代码之前先检查一下 我检查了分发任务视图 它没有在那里列出 我查看了几个可能的软件包 但无济于事 更新 我已经添加了dsplitnorm psplitnorm qsplitnorm and
  • 打开 JavaScript 文件时 Visual Studio 2008 崩溃?

    每当我尝试打开特定的 JavaScript 文件时 Visual Studio Team system 2008 就会崩溃 但没有任何错误消息 我发现this http social msdn microsoft com Forums en
  • 在 django 中迁移数据的最佳方式是什么

    在我的模型中进行一些更改 例如模型中的新字段和新模型 后 将这些更改反映到我填充的数据库中的最佳方式是什么 PS 我想在一个地方看到许多解决方案的评级 显然已经列出了更多解决方案here https stackoverflow com qu
  • 是否使用任何未定义的不确定值或仅使用那些存储在具有自动存储的对象中的值?

    根据 C99 J 2 在以下情况下行为未定义 具有自动存储期限的对象的值在被使用时被使用 不定 那么对象具有不确定值的所有其他情况又如何呢 如果我们使用它们 我们是否也总是调用 UB 或者我们是否仅当它们包含陷阱表示时才调用 UB 示例包括
  • 当我单击单个标记时,React Google Map InfoWindow 显示所有信息

    由于某种原因 当我单击单个标记时 所有信息窗口都会显示 我希望当我单击一个标记时会出现一个信息窗口 有人可以解释为什么所有标记中的所有信息窗口都会显示吗 因此 当我关闭它时 InfoWindow 也会关闭 当我单击目标标记时 预期行为是 I
  • 开发 Android 应用程序时使用 Linux 操作系统重要吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我开始了 Android 开发 并意识到 Android 完全构建在 Linux 上 但我目前正在 Windows 上编程 我应该继续使用 Wi
  • 如何在 QTreeWidget 中找到所选项目?

    我有一个继承 QTreeWidget 的类 如何找到当前选定的行 通常我通过这种方式将信号连接到插槽 connect myButton SIGNAL triggered bool this SLOT myClick 但是 我找不到类似的东西
  • mySQL 查询多个 - 返回错误 mysql_fetch_array

    我有 2 个数据库表 用于预订系统 其结构如下 quartos id quarto tipo quarto vista quarto 储备 id reserva n cliente id quarto check in check out
  • 配置要在 Consumer 中传递的端点时添加元数据

    因此 当我配置端点并设置ep Consumer
  • 在 iPhone 和 Android 上完成 AES 加密

    我们正在 android 和 iphone 上创建相同的项目 现在的问题是我们需要使用Web服务以加密形式将用户信息发送到aspx服务器 我们都实现了它 但结果不同 因此是否有一种通用的 AES 加密方法可以产生相同的结果并可以在服务器上解
  • 如何从具有 null(0) 字符的 char 数组创建 C++ istringstream?

    我有一个 char 数组 其中随机位置包含空字符 我尝试使用此数组 encodedData arr 创建一个 iStringStream 如下所示 我使用此 iStringStream 将二进制数据 Iplimage 的 imagedata