取消对无符号字符指针的引用并将其值存储到字符串中 我正在研究一个工具,它可以在某些地址中删除值,它既在C语言中,也在C++语言中,尽管我对C++不熟悉,但我想我可以利用C++提供的字符串类型。

取消对无符号字符指针的引用并将其值存储到字符串中 我正在研究一个工具,它可以在某些地址中删除值,它既在C语言中,也在C++语言中,尽管我对C++不熟悉,但我想我可以利用C++提供的字符串类型。,c++,c,string,pointers,casting,C++,C,String,Pointers,Casting,我所拥有的是: unsigned char contents_address = 0; unsigned char * address = (unsigned char *) add.addr; int i; for(i = 0; i < bytesize; i++){ //bytesize can be anything from 1 to whatever if(add.num == 3){ contents_address = *(address + i);

我所拥有的是:

unsigned char contents_address = 0; 
unsigned char * address = (unsigned char *) add.addr;
int i;

for(i = 0; i < bytesize; i++){     //bytesize can be anything from 1 to whatever
  if(add.num == 3){
    contents_address = *(address + i); 
    //printf("%02x ", contents_address);
  }
}
无符号字符内容\u地址=0;
无符号字符*地址=(无符号字符*)add.addr;
int i;
对于(i=0;i
正如您所看到的,我试图做的是取消对无符号字符指针的引用。我想做的是有一个字符串变量,并将所有未引用的值连接到其中,最后,而不必通过for case来获取每个元素(通过拥有一个字符数组或只通过指针),从而拥有一个包含所有内容的字符串变量


注意:我需要这样做,因为字符串变量将要进入MySQL数据库,在表中插入数组将是一件痛苦的事情…

我不太明白您在这里要做什么(为什么要将一个未引用的值分配给名为…\u address的变量)


但也许您正在寻找的是一个stringstream。

我不太明白您想在这里做什么(为什么要为名为…\u address的变量分配一个未引用的值)


但也许您正在寻找的是stringstream。

试试我从这个链接中借用的这个:

#包括
#包括
std::字符串hexifyChar(int c)
{
std::stringstream-ss;

ss试试我从这个链接中借用的:

#包括
#包括
std::字符串hexifyChar(int c)
{
std::stringstream-ss;

ss这里有一个相对高效的版本,只执行一次分配,不执行额外的函数调用:

#include <string>

std::string hexify(unsigned char buf, unsigned int len)
{
    std::string result;
    result.reserve(2 * len);

    static char const alphabet[] = "0123456789ABCDEF";

    for (unsigned int i = 0; i != len)
    {
        result.push_back(alphabet[buf[i] / 16]);
        result.push_back(alphabet[buf[i] % 16]);
    {

    return result;
}
#包括
字符串hexify(无符号字符buf,无符号整数len)
{
std::字符串结果;
结果:保留(2*len);
静态字符常量字母表[]=“0123456789ABCDEF”;
for(无符号整数i=0;i!=len)
{
结果:向后推(字母[buf[i]/16]);
结果:向后推(字母[buf[i]%16]);
{
返回结果;
}

这应该比使用iostreams更有效。如果您更喜欢将分配留给使用者的C版本,也可以对其进行简单的修改,以写入给定的输出缓冲区。

这里有一个相对有效的版本,它只执行一次分配,不执行额外的函数调用:

#include <string>

std::string hexify(unsigned char buf, unsigned int len)
{
    std::string result;
    result.reserve(2 * len);

    static char const alphabet[] = "0123456789ABCDEF";

    for (unsigned int i = 0; i != len)
    {
        result.push_back(alphabet[buf[i] / 16]);
        result.push_back(alphabet[buf[i] % 16]);
    {

    return result;
}
#包括
字符串hexify(无符号字符buf,无符号整数len)
{
std::字符串结果;
结果:保留(2*len);
静态字符常量字母表[]=“0123456789ABCDEF”;
for(无符号整数i=0;i!=len)
{
结果:向后推(字母[buf[i]/16]);
结果:向后推(字母[buf[i]%16]);
{
返回结果;
}

这应该比使用iostreams更有效。如果您更喜欢将分配留给使用者的C版本,您也可以简单地修改它以写入给定的输出缓冲区。

您实际上只是想对字节缓冲区进行十六进制化吗?@KerrekSB是的,我正在尝试对字节缓冲区进行十六进制化,我有什么的大小和地址C++和C++ C++语言都是C语言,C++是几乎不同的语言,而C++几乎是C的超集,它不是严格的超集,不是所有的C程序都是有效的C++程序,也没有几个C++程序是有效的C程序。C和C++中的工作是相等的……这里的差异不适用,所以C++和C++都是C++。你真的只是想把字节缓冲区加起来吗?@ KrErkSB是的,我试图把字节缓冲区加起来,我有我想要的大小和地址。C和C++都是C或C++。它们是不同的语言,而C++是I。它几乎不是C的超集,它不是严格的超集。不是所有的C程序都是有效的C++程序,也没有几个C++程序是有效的C程序。C和C++中的工作是相等的,这里的差异不适用,所以它既是C又是C++。问题是基本上如何将未签名的字符值解压成字符串。问题是基本上如何将未签名的字符删除值连接到一个字符串中。