我的代码在这里
<?php
header("Content-type: text/xml");
$i=0;
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml.= "\n".'<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
$db = new PDO('mysql:host=xxx;dbname=xxx', 'xx', 'xxx');
$stmt[$i] = $db->query('SELECT count(*) FROM wp_term_taxonomy WHERE taxonomy="product-cat" || taxonomy="product-brand"');
$rowcount = $stmt[$i]->fetchColumn();
for ($i=0; $i<2; $i++)
{
$sth[$i] = $db->query('SELECT term_id FROM wp_term_taxonomy WHERE taxonomy="product-cat" || taxonomy="product-brand"');
$t_id[$i] = $sth[$i]->fetchColumn();
$stmt[$i] = $db->query('SELECT taxonomy FROM wp_term_taxonomy WHERE term_id = '.$t_id[$i].'');
$t_taxonomy[$i] = $stmt[$i]->fetchColumn();
$stmt[$i] = $db->query('SELECT slug FROM wp_terms WHERE term_id = '.$t_id[$i].'');
$t_slug[$i] = $stmt[$i]->fetchColumn();
}
echo $xml;
for ($i=0; $i<2; $i++)
{
$xml.= "\n\t\t".'<url>'."\n";
$xml.= "\t\t\t".'<loc>'."http://example.com/search-page/?$t_taxonomy[$i]=$t_slug[$i]"."\t$t_id[$i]\t$i\t$rowcount".'</loc>';
$xml.= "\n\t\t\t".'<changefreq>always</changefreq>';
$xml.= "\n\t\t\t".'<priority>1.0</priority>';
$xml.= "\n\t\t".'</url>'."\n";
}
?>
<?php
$xml.= "\n".'</urlset>';
$handle = fopen('sitemap_custom.xml','w+');
fwrite($handle,$xml);
fclose($handle);
?>
输出
44
1
任何机构都可以解释它。
答案 0 :(得分:1)
我们知道int数据类型的大小为2 bytes
或4 bytes
取决于您的系统。而char
指针一次指向一个字节。
int a = 300;
的内存表示
所以,首次打印 44 输出。
然后,
printf("%d",*++p);
第一个p
是递增,指针指向下一个(第二个)字节。因此,下一个字节输出为1
。
答案 1 :(得分:0)
a
太大而无法在一个字节上表示,因为它的二进制表示至少为0000000100101100
(取决于int
类型获得的字节数。在此表示中获得2个字节,但是,它可以有4或8个,或其他大小,平台相关的)。
执行char *p=(char *)&a;
后,您只需查看a
- 00000001---00101100
的一个字节 - 右侧部分,其值为44。
当移动到下一个字节位置(++p
)时,那里的字节是左边的部分(00000001
),它的值是1
答案 2 :(得分:0)
您获得这些值的原因是因为您将int
内存位置视为两个char
内存位置(如果您知道自己正在做什么,当然可以)。您的原始int a
在内存(字节视图)中表示如下:
[0x2c=44] [0x01=1]
组合时0x12c
为300.
对您的代码进行以下修改有助于更好地理解此
#include <stdio.h>
int main(int argc, char** argv)
{
int i;
int a=300;
char *p=(char*)&a;
for (i=0;i<sizeof(a);i++)
{
printf("[0x%02x] ", p[i]);
}
printf("\n");
}