加急:php 类似delphi的字符串转字节数组

时间:2023-01-11 20:38:27
求高手帮我转换一下函数,是要得到字节数组:

Delphi版:
InBuf: array[0..2] of byte; //3字节数组
Move(S[1], InBuf, 3)  //拷贝S[1]开始的3个到inbuf里

别的语言1:
CString szTmep="字符串!";
char szArr[32];

memcpy(szArr,szTemp.Getbuffer(),32);

别的语言2:
string str = "E4B8AD";
                byte[] b = new byte[str.Length/2];
                for (int i = 0; i < b.Length; i++)
                {
                    b[i] = byte.Parse(str.Substring (i*2,2), NumberStyles.HexNumber);
                } 


跪求把delphi版的转成php的,找了很多资料找不到,小弟自己转了一个,是错的:
 $InBuf = substr($S,1,3); 
for($k=0; $k<strlen($InBuf); $k++) $InBuf[$k] = ord($InBuf[$k]); 


解决了第二天再加分

8 个解决方案

#1


不是很明白楼主的意思,楼主的意思把一个字符串改为一个数组表示?

#2


引用 1 楼 dzxccsu 的回复:
不是很明白楼主的意思,楼主的意思把一个字符串改为一个数组表示?

是的,要拷贝原字符串的几个长度到一个字节数组中

#3


是字节数组

#4



//先转成utf-8的
$S = iconv('xxx', 'utf-8', $S);
$InBuf = substr($S,1,3); 
for($k=0; $k <strlen($InBuf); $k++) 
{
  $InBuf[$k] = ord($InBuf[$k]);
}

其实你的需求不明确.
因为php里不同编码以及中文都要特殊处理的.
中文在utf-8编码情况下,是占3个字符长度的.
不知道这种情况下你要如何处理.

比如说$str = "sfa中";
用echo strlen($str);//6
echo mb_strlen($str, 'utf-8');//4
同理切割的时候也要分substr, mb_substr两种方式.

#5



$arr=array();
$str='中国人123';
$len=strlen($str);
for($i=0;$i<$len;$i++){
    if(ord(substr($str,$i,1))>0xa0){
       $arr[$i]= substr($str,$i,2);//汉字双字节
   $i++;
        }else{
         $arr[$i]=substr($str,$i,1);//单字节
            }
}
$narr=array_values($arr);
print_r($narr);
楼主试试

#6


up

#7


转成utf-8?
$S = iconv('xxx', 'utf-8', $S);

#8


引用 7 楼 babysc1 的回复:
转成utf-8?
$S = iconv('xxx', 'utf-8', $S);

xxx代表字符的编码

#1


不是很明白楼主的意思,楼主的意思把一个字符串改为一个数组表示?

#2


引用 1 楼 dzxccsu 的回复:
不是很明白楼主的意思,楼主的意思把一个字符串改为一个数组表示?

是的,要拷贝原字符串的几个长度到一个字节数组中

#3


是字节数组

#4



//先转成utf-8的
$S = iconv('xxx', 'utf-8', $S);
$InBuf = substr($S,1,3); 
for($k=0; $k <strlen($InBuf); $k++) 
{
  $InBuf[$k] = ord($InBuf[$k]);
}

其实你的需求不明确.
因为php里不同编码以及中文都要特殊处理的.
中文在utf-8编码情况下,是占3个字符长度的.
不知道这种情况下你要如何处理.

比如说$str = "sfa中";
用echo strlen($str);//6
echo mb_strlen($str, 'utf-8');//4
同理切割的时候也要分substr, mb_substr两种方式.

#5



$arr=array();
$str='中国人123';
$len=strlen($str);
for($i=0;$i<$len;$i++){
    if(ord(substr($str,$i,1))>0xa0){
       $arr[$i]= substr($str,$i,2);//汉字双字节
   $i++;
        }else{
         $arr[$i]=substr($str,$i,1);//单字节
            }
}
$narr=array_values($arr);
print_r($narr);
楼主试试

#6


up

#7


转成utf-8?
$S = iconv('xxx', 'utf-8', $S);

#8


引用 7 楼 babysc1 的回复:
转成utf-8?
$S = iconv('xxx', 'utf-8', $S);

xxx代表字符的编码