如何将mysql指针强制转换为无符号长字符串

如何将mysql指针强制转换为无符号长字符串,mysql,c,pointers,casting,Mysql,C,Pointers,Casting,在64位linux系统上,在以下程序中将行[1]转换为无符号长字符时遇到问题: #include <stdlib.h> #include <string.h> #include <stdio.h> #include <mysql.h> MYSQL *conn; int main() { char query[6500]; int mysqlStatus = 0; MYSQL_RES *result; MYSQ

在64位linux系统上,在以下程序中将行[1]转换为无符号长字符时遇到问题:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <mysql.h>

MYSQL *conn;

int main()
{

    char query[6500];
    int mysqlStatus = 0;

    MYSQL_RES *result;
    MYSQL_ROW row;
    int num_rows_result = 0;

    unsigned long long_ip;
    int i = 0;

    /* connect to db and initialize arrays with values read from db */
    conn = mysql_init(NULL);
    mysql_real_connect(conn, "host", "username", "passwd", "db", 0, NULL, 0);

    sprintf(query," ");
    sprintf(query,"SELECT * FROM rolla_sorted_in1");
    mysqlStatus = mysql_query(conn, query);

    if (mysqlStatus)
    {
        printf("there was a problem with the following mysql query:\n");
        printf("\t%s\n",query);
    }

    result = mysql_store_result(conn);
    num_rows_result = mysql_num_rows(result);

    if ( num_rows_result > 0 )
    {

        for (i=0;i<10;i++)
        {

            row = mysql_fetch_row(result);

            long_ip = (unsigned long) row[1];
            printf("row[1]: %s, long_ip: %lu\n",row[1],long_ip);

        }

    }
    else
    {
        printf("sorted_in1 is empty\n");

    }

    mysql_free_result(result);

    printf("sizeof(ptr): %lu, sizeof(ul): %lu\n",sizeof(row[1]),sizeof(long_ip));

}
有什么建议吗?谢谢。

非常简短的回答 使用
long\u ip=strtoul(行[1],NULL,0)
获取无符号的long值

略显精细 :-)

第[0]行。。n列的行[n-1]都是指向由原始字节确定的类型安全字段长度的指针。整数和浮点数不存储在int或long的机器类型中;但是他们的字节表示。。。例如,255不存储为
0xFF
字节,而是存储为
2
5
5
:长度为3的字符串

正确的方法(有点) 您必须使用mysql\u fetch\u字段来检索字段。。。。是字节计数字符串的数组,这些字符串不能以NULL结尾,因为它们是二进制数据。因此,您必须确保使用mysql_fetch_length(results)为每一行使用正确的字节长度,并使用类似snprintf(字段[k],“%.s],(int)length[k],行[k]);要将数据放入以null结尾的字符串中,其中数据不是BLOB(对于任何BLOB,必须使用memcpy处理),在您的情况下,数据是一个整数(实际上存储为行中的字符串),因此必须使用long_ip=strtoul(行,null,0);将未签名的long取出

你真正应该读的东西

我非常感谢您在这方面的帮助。多谢各位。
row[1]: 419670989, long_ip: 6420226
row[1]: 1102313293, long_ip: 6420354
row[1]: 3294303560, long_ip: 6420482
row[1]: 1408935374, long_ip: 6420610
row[1]: 3242924999, long_ip: 6420738
row[1]: 1509939008, long_ip: 6420866
row[1]: 2707912135, long_ip: 6420994
row[1]: 2556917191, long_ip: 6421122
row[1]: 3510964689, long_ip: 6421250
row[1]: 1186041166, long_ip: 6421379
sizeof(ptr): 8, sizeof(ul): 8